home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / gfx / vtdevel3.lha / SourceAGA / Vector.s < prev    next >
Text File  |  1994-06-27  |  84KB  |  4,090 lines

  1. ;vector
  2.  
  3. rout            ;when this is off, the routine-file will be
  4.             ;assembled, on=testing
  5.             
  6. ;debug            ;when this is on, colors in the background will
  7.             ;show how much time the routine needs.
  8.  
  9. ;ntsctest        ;when this is on, the routineplayer is in ntsc-mode
  10.  
  11. ;ocs            ;off=AGA,on=OCS testing not possible on OCS !
  12.  
  13. routinemode    equ    256+15    ;the routinemode !
  14.  
  15.  
  16. ; VideoTracker AGA developer source 25-12-93
  17. ; 24-bits colors, Super-HiRes, HAM8, maximum burstmode (64 pixels aligned)
  18. ; wich makes low-resolution overscan a bit ugly.
  19. ; no "interactive" support anymore, it's only used by Kick 1.3 users.
  20.  
  21. ; the first part of the source handles the things that are necessary to
  22. ; show the picture/copper and playing of the routine.
  23. ; the part between the "***" lines is the routine-source.
  24. ; at the bottom of the file, there are the necessary incbin-files who
  25. ; are needed to test the routine.
  26. ; these are saved with "save effect" in videotracker. they are raw
  27. ; data files which can be fonts,pictures,landscapes,vectorobjects
  28. ; etcetra.
  29. ; the incbin-files are put in the "variables" table, in the routine-
  30. ; player-handler
  31. ; the place where it's done can be found by searching for "!!!"
  32.  
  33.     opt    a+    ;devpac 3 optimize
  34.     opt    o+
  35.  
  36.     ifnd    ocs
  37. vew_wid    equ    48
  38.     endc
  39.     ifd    ocs
  40. vew_wid    equ    44
  41.     endc
  42.     
  43. vew_hgt    equ    290
  44. win_hgt    equ    117
  45. win_str    equ    $1a
  46.  
  47.         ifd    ocs
  48. pic_wid        equ    4        ;wide in bytes
  49. pic_hgt        equ    6        ;hoogte
  50. pic_dpt        equ    8        ;number planes
  51. pic_ani        equ    10        ;aantal effes (anim)
  52. pic_vew        equ    12        ;viewmode
  53. pic_cycstr    equ    14        ;cycle start (*4)
  54. pic_cycend    equ    15        ;cycle end (*4)
  55. pic_cycspd    equ    16        ;cycle speed (*4)
  56. pic_cycadd    equ    17        ;cycle add (*4)
  57. pic_palnum    equ    30        ;aantal kleuren
  58. pic_pal        equ    32        ;palette start
  59. pic_palsiz    equ    256*2        ;vaste palette size
  60. pic_raw        equ    pic_pal+pic_palsiz    ;palette start
  61.         endc
  62.         
  63.         ifnd    ocs
  64. pic_wid        equ    4        ;wide in bytes
  65. pic_hgt        equ    6        ;hoogte
  66. pic_dpt        equ    8        ;number planes
  67. pic_ani        equ    10        ;aantal effes (anim)
  68. pic_vew        equ    12        ;viewmode
  69. pic_cycstr    equ    14        ;cycle start (*8)
  70. pic_cycend    equ    15        ;cycle end (*8)
  71. pic_cycspd    equ    16        ;cycle speed (*8)
  72. pic_cycadd    equ    17        ;cycle add (*8)
  73. pic_widmod    equ    46        ;animation-width modulo
  74. pic_future    equ    50        ;free future space
  75. pic_palnum    equ    62        ;aantal kleuren
  76. pic_pal        equ    64        ;palette start
  77. pic_palsiz    equ    256*4        ;vaste palette size (longwords)
  78. pic_raw        equ    pic_pal+pic_palsiz    ;palette start
  79.         endc
  80.         
  81. var_len        equ    $300        ;lengte vartabel
  82.  
  83. var__GfxBase    equ    $000        ;graphics lib
  84. var_pic1    equ    $004        ;current picture
  85. var_anispd1    equ    $008        ;animspeed
  86. var_anitel1    equ    $00c        ;animcount
  87. var_cprbck    equ    $010        ;copperback
  88. var_bck        equ    $014        ;background
  89. var_pic2    equ    $018        ;current picture
  90. var_ntsc    equ    $01c        ;ntsc/pal frequence
  91. var_lnd        equ    $020        ;landscape
  92. var_anilop1    equ    $024
  93. var_rottrg    equ    $028        ;effect trigger
  94. var_txt1    equ    $040        ;text
  95. var_txt16    equ    15*4+var_txt1
  96. var_vec1    equ    $080        ;vectors
  97. var_vec16    equ    15*4+var_vec1
  98. var_fon1    equ    $0c0        ;fonts
  99. var_fon16    equ    15*4+var_fon1
  100. var_cols1    equ    $100        ;colorsets
  101. var_cols16    equ    15*4+var_cols1
  102. var_obj1    equ    $180        ;objects
  103. var_obj16    equ    15*4+var_obj1
  104.  
  105.     ifd    rout
  106.     ;videotracker routine-test
  107.  
  108.     incdir    "w:include/"
  109.     include    "exec/types.i"
  110.     include    "graphics/gfxbase.i"
  111.     include    "lvo/graphics_lib.i"
  112.     incdir    'videotracker:effect/'
  113.  
  114.     SECTION    1,CODE_C
  115. tus
  116.     lea    var,a0
  117.     move.l    #rottube,var_vec1(a0)    ;incbinfile !!!
  118. ;    move.l    #rotsrc,curpic1        ;picture !!!
  119. ;    move.l    #rotsrc,curpal1        ;palette !!!
  120. ;    move.l    #rotset,var_cols1(a0)    ;colorset !!!
  121.  
  122.     bsr    paltabres
  123.  
  124.     move.l    ($4).w,a6
  125.     sub.l    a1,a1
  126.     jsr    -$126(a6)        ;findtask
  127.     move.l    d0,curtsk
  128.     move.l    d0,a0
  129.     move.l    $b8(a0),tskpri
  130.  
  131.     lea    dosnam,a1        ;doslib openen
  132.     moveq.l    #0,d0
  133.     move.l    (4).w,a6
  134.     jsr    -408(a6)        ;openlib
  135.     move.l    d0,doslib
  136.  
  137.     bsr.s    label5            ;videotracker opstarten
  138.     
  139.     move.l    curtsk,a0
  140.     move.l    tskpri,$b8(a0)
  141.     move.l    ($4).w,a6
  142.     jsr    -$84(a6)        ;forbid
  143.  
  144.     move.l    doslib,a1
  145.     move.l    (4).w,a6
  146.     jsr    -414(a6)        ;closelib
  147.  
  148.     moveq.l    #0,d0
  149.     rts
  150.     
  151. label5
  152.     move.l    (4).w,a6        ;workbench gedoe
  153.  
  154.     move.b    530(a6),ntscmode    ;50/60 hertz halen
  155.  
  156.     ifd    ntsctest
  157.     move.b    #60,ntscmode        ;60 hertz (ntsc)
  158.     endc
  159.  
  160.     cmp.b    #50,ntscmode        ;ntsc ?
  161.     beq.s    str.ntsc
  162.     move.l    #vew_hgt-56,hogscr    ;set NTSC screen hight
  163. str.ntsc
  164.  
  165.     lea    cprjmp,a2        ;copjmp zetten !
  166.     move.l    #cprbck-8,d0
  167.     move.w    d0,6(a2)
  168.     swap    d0
  169.     move.w    d0,2(a2)
  170.  
  171.     lea    cprbck-8,a2        ;copstr zetten !
  172.     move.l    #cpr,d0
  173.     move.w    d0,6(a2)
  174.     swap    d0
  175.     move.w    d0,2(a2)
  176.  
  177.     bsr    cprsprrem        ;sprites legen
  178.  
  179.     lea    gfxnam,a1        ;graphics lib openen
  180.     move.l    (4).w,a6
  181.     jsr    -408(a6)        ;openlib
  182.     move.l    d0,a6
  183.     move.l    d0,gfxlib
  184.     move.l    38(a6),oldcprlist
  185.  
  186.     bset    #1,$bfe001
  187.     bsr    copbuf            ;copper vullen
  188.  
  189.     bsr    sysoff
  190.  
  191. gadrun
  192.     btst    #6,($bfe001).l
  193.     bne    gadrun
  194.  
  195. scrend
  196. scrend.play
  197.     bsr    syson
  198.  
  199.     move.l    gfxlib,a1
  200.     move.l    (4).w,a6
  201.     jsr    -414(a6)        ;closelib
  202.  
  203. scrend.qb
  204.     moveq.l    #0,d0    
  205.     rts
  206.     
  207.     ;vertical blank interrupt, no blits.
  208.     ;handles counters,interlace,sprite
  209.     ;level 3
  210.  
  211. intvb
  212.     bra.s    intvb.cnt
  213.     dc.l    'VIDU'
  214.     dc.l    'LOOP'
  215. intvb.cnt
  216.     movem.l    d0-d7/a0-a6,-(sp)
  217.     lea    ($dff000).l,a6
  218.  
  219.     move.w    $01e(a6),d0
  220.     btst    #5,d0            ;vblank ?
  221.     bne.s    intvb.vb
  222.  
  223.     bra.s    intcop.end
  224.  
  225. intvb.vb
  226.     bsr    grap
  227.     bsr    palctr            ;palette zetten
  228.     bsr.s    copbuf            ;copper vullen
  229.     
  230. intvb.end
  231.     move.w    #$0020,$09c(a6)    ;vb bit wissen
  232.     movem.l    (sp)+,d0-d7/a0-a6    ;multitask uit, shit !
  233.     rte
  234.  
  235. intcop.end
  236.     movem.l    (sp)+,d0-d7/a0-a6
  237.     move.l    intvbold,-(sp)
  238.     rts
  239.  
  240.     ;transmission buffer empty routine, BLIT !
  241.     ;handles routines,animations
  242.     
  243. inttbe                    ;tbe interrupt
  244.     movem.l    d0-d7/a0-a6,-(sp)
  245.     lea    ($dff000).l,a6
  246.  
  247.     move.w    $01e(a6),d0
  248.     btst    #0,d0            ;no tbe ?
  249.     beq.s    intdskblk
  250.  
  251.  
  252.     btst    #6,($bfe001).l        ;muis ingedrukt ?
  253.     beq.s    inttbe.cop
  254.     btst    #2,($dff016).l
  255.     beq.s    inttbe.cop
  256.  
  257.     ifd    debug
  258.     move.w    #$700,$dff180
  259.     endc
  260.     
  261.     bsr    rotply            ;routineplayer BLIT !
  262.     bsr.s    copbuf            ;copper vullen
  263.  
  264.     ifd    debug
  265.     move.w    #$070,$dff180
  266.     endc
  267.     
  268. inttbe.cop
  269.  
  270. inttbe.end
  271.     move.w    #$0001,$09c(a6)
  272.     movem.l    (sp)+,d0-d7/a0-a6
  273.     rte
  274.  
  275. intdskblk
  276.     move.w    #$0001,$09c(a6)        ;be sure for no tbe handling
  277.     movem.l    (sp)+,d0-d7/a0-a6
  278.     move.l    inttbeold,-(sp)
  279.     rts
  280.  
  281.  
  282.     ;moves the copperbuffer to the copperlist
  283.     ;sort of double buffering
  284.     
  285. copbuf
  286.     movem.l    d0-d7/a0-a6,-(sp)
  287.  
  288.     lea    ($dff000).l,a6
  289.  
  290. copbuf.novb                ;copperchange overslaan
  291.     moveq.l    #0,d0
  292.     move.b    $005(a6),d0
  293.     lsl.w    #8,d0
  294.     moveq.l    #0,d1
  295.     move.b    $006(a6),d1
  296.     add.w    d1,d0
  297.  
  298.     cmp.w    #$4,d0            ;lower limit, all stations 100%
  299.     blt    copbuf.novb
  300.  
  301.     cmp.b    #50,ntscmode
  302.     beq.s    copbuf.pal
  303.     cmp.w    #$133-72-8,d0        ;ntsc grens
  304.     bge    copbuf.novb
  305.     bra.s    copbuf.cont
  306. copbuf.pal
  307.     cmp.w    #$133-8,d0        ;pal grens
  308.     bge    copbuf.novb
  309. copbuf.cont
  310.  
  311.     lea    gra.s,a0        ;buffer copieren
  312.     lea    cprbuf,a1
  313. copbuf_aga                ;AGA stuff :)
  314.     move.l    #(gra.ql)/4-1,d0
  315. copbuf.a
  316.     move.w    2(a0),2(a1)
  317.     add.l    #4,a0
  318.     add.l    #4,a1
  319.     dbra    d0,copbuf.a
  320.  
  321. copbuf.end
  322.     movem.l    (sp)+,d0-d7/a0-a6
  323.     rts
  324.  
  325.     ;goes back to the workbench
  326.     
  327. syson
  328.     movem.l    d0-d7/a0-a6,-(sp)
  329.  
  330.     move.w    #$0001,$dff09a        ;tbeint uit
  331.     move.l    intvbold,($6c).w
  332.     move.l    inttbeold,($64).w
  333.  
  334.     move.l    4,a6
  335.     jsr    -138(a6)        ;permit
  336.  
  337.     move.l    gfxlib,a6
  338.     jsr    -462(a6)        ;disownblitter
  339.  
  340.     move.l    wbview,a1
  341.     move.l    gfxlib,a6
  342.     jsr    _LVOLoadView(a6)     ; Fix view
  343.     jsr    _LVOWaitTOF(a6)
  344.     jsr    _LVOWaitTOF(a6)         ; wait for LoadView()
  345.  
  346. syson.ras
  347.     cmp.b    #$c0,$dff006        ;prevent copperjump
  348.     bne    syson.ras
  349.  
  350.     move.l    gfxlib,a6
  351.     move.l    gb_copinit(a6),$dff080     ; Kick it into life
  352.  
  353.     movem.l    (sp)+,d0-d7/a0-a6
  354.     rts
  355.     
  356.     ;goes back to the gadgetscreen
  357.     
  358. sysoff
  359.     movem.l    d0-d7/a0-a6,-(sp)
  360.      
  361.     move.l    gfxlib,a6
  362.     move.l    gb_ActiView(a6),wbview    ;current view
  363.     sub.l    a1,a1            ; clear a1
  364.     jsr     _LVOLoadView(a6)     ; Flush View to nothing
  365.     jsr    _LVOWaitTOF(a6)     ; Wait once
  366.     jsr    _LVOWaitTOF(a6)     ; Wait again.
  367.  
  368.     move.l    gfxlib,a6
  369.     jsr    -456(a6)        ;ownblitter
  370.  
  371.     move.l    4,a6
  372.     jsr    -132(a6)        ;forbid
  373.         
  374.     move.l    ($6c).w,intvbold
  375.     move.l    #intvb,($6c).w
  376.     move.l    ($64).w,inttbeold
  377.     move.l    #inttbe,($64).w
  378.     move.w    #$8001,$dff09a        ;tbeint aan
  379.     bsr    gracpr            ;reset copper
  380.     bsr    copbuf            ;copy copper
  381.     move.l    #cpr,$dff080
  382.  
  383.     movem.l    (sp)+,d0-d7/a0-a6
  384.     rts
  385.     
  386. cprsprrem
  387.     movem.l    d0-d7/a0-a6,-(sp)
  388.     lea    cprspr,a0
  389.     move.l    #sprdat,d0
  390.     move.w    #7,d1
  391. cprsprrem.a
  392.     move.w    d0,3*2(a0)
  393.     swap    d0
  394.     move.w    d0,1*2(a0)
  395.     swap    d0
  396.     add.l    #8,a0
  397.     dbra    d1,cprsprrem.a
  398.     movem.l    (sp)+,d0-d7/a0-a6
  399.     rts
  400.  
  401. varset                    ;variablen neerzetten
  402.     movem.l    d0-d7/a0-a6,-(sp)
  403.     move.l    #var,a0
  404.  
  405.     move.l    #cprbck,var_cprbck(a0)
  406.     move.l    gfxlib,var__GfxBase(a0)
  407.     move.b    ntscmode,var_ntsc(a0)
  408.  
  409.     move.l    curpic1,var_pic1(a0)    ;variabel
  410.     move.l    curpic2,var_pic2(a0)    ;variabel
  411.     move.w    anispd1,var_anispd1(a0)
  412.     move.w    anitel1,var_anitel1(a0)
  413.     move.b    anilop1,var_anilop1(a0)
  414.     move.l    #rottrg,var_rottrg(a0)
  415.     movem.l    (sp)+,d0-d7/a0-a6
  416.     rts
  417.     
  418.     ;this routine handles all videotracker-routines
  419.  
  420. rotply    
  421.     movem.l    d0-d7/a0-a6,-(sp)
  422.  
  423.     moveq.l    #0,d0
  424.  
  425.     lea    currot1,a2        ;routine 1
  426.     move.w    rotinf1,d0        ;routine info
  427.     bsr.s    rotplyr
  428.  
  429. rotply.end
  430.     movem.l    (sp)+,d0-d7/a0-a6
  431.     rts
  432.  
  433.     ;this routine handles 1 routine, BLIT !
  434.     
  435. rotplyr
  436.     movem.l    d0-d7/a1-a6,-(sp)
  437.  
  438.     move.l    #rot,(a2)        ;routinestart address
  439.  
  440. ;    move.b    #50,ntscmode        ;ntsc/pal hz
  441.     clr.l    curpic2            ;background picture
  442.     move.w    #1,anispd1        ;animationspeed
  443.     clr.w    anitel1            ;animation position
  444.  
  445.     lea    var,a0            ;communication-table
  446.  
  447.     move.b    #0,anilop1        ;animloop off/on !!!
  448.     move.w    #32,anispd1        ;animdelay !!!
  449.     move.l    #routinemode,d0        ;routinemode !!!
  450.  
  451.     sub.l    a0,a0            ;picture info legen
  452.  
  453.     tst.l    (a2)            ;is er een routine ?
  454.     beq    rotplyr.end        ;interlace handling
  455.  
  456.     move.l    intdel,d2        ;delay
  457.     move.l    inttel,d1        ;teller
  458.     cmp.w    d2,d1
  459.     blt    rotplyr.end
  460.     clr.l    inttel
  461.                 
  462.     bsr    varset            ;variabelen updaten
  463.  
  464.     move.l    (a2),a1            ;routine halen
  465.     move.l    #var,a0            ;variablen tabel
  466.  
  467.     movem.l    d3-d7/a1-a6,-(sp)
  468.     moveq.l    #0,d1            ;vars wissen
  469.     moveq.l    #0,d2
  470.     moveq.l    #0,d3
  471.     moveq.l    #0,d4
  472.     moveq.l    #0,d5
  473.     moveq.l    #0,d6
  474.     moveq.l    #0,d7
  475.     sub.l    a2,a2
  476.     sub.l    a3,a3
  477.     sub.l    a4,a4
  478.     sub.l    a5,a5
  479.  
  480.     jsr    4(a1)            ;routine afwerken
  481.     movem.l    (sp)+,d3-d7/a1-a6
  482.  
  483.     ;Routine:
  484.     ;
  485.     ;Input:
  486.     ;a0=variabelentabel
  487.     ;d0=routinemode
  488.     ;
  489.     ;Output:
  490.     ;a0=picture
  491.     ;d1=copperlist
  492.     ;d2=interruptdelay        (NOT used till now)
  493.     
  494.     move.w    #$0020,$dff09a        ;vb off !
  495.  
  496.     move.l    d2,intdel        ;delay
  497.  
  498.     lea    cprjmp,a3
  499.     move.l    #cprbck-8,d0
  500.  
  501.     cmp.l    (a2),a1            ;routine ondertussen gewipt ?
  502.     bne.s    rotplyr.nocop
  503.     tst.l    d1            ;copperlist ?
  504.     beq.s    rotplyr.nocop
  505.     move.l    d1,d0
  506. rotplyr.nocop
  507.     move.w    d0,6(a3)
  508.     swap    d0
  509.     move.w    d0,2(a3)
  510.  
  511.     cmp.l    #0,a0            ;picture ?
  512.     beq.s    rotplyr.endvb
  513.  
  514.     move.l    a0,curpic1        ;current picture (cycle)
  515.     move.l    a0,curpal1        ;current palette
  516.  
  517.     tst.b    rotdpl            ;plane is geleverd
  518.     beq.s    rotplyr.set
  519.     clr.b    rotdpl
  520.     clr.l    cycdel1            ;cycle info wissen
  521.     clr.l    4+cycdel1
  522.     clr.l    curfrm1            ;curfrm1, altijd planes zetten
  523. rotplyr.set
  524.     clr.b    dplctr
  525.     bsr.s    grap
  526.     bsr    grac            ;colorset
  527. rotplyr.endvb
  528.     move.w    #$8020,$dff09a
  529. rotplyr.end
  530.     movem.l    (sp)+,d0-d7/a1-a6
  531.     rts
  532.  
  533.     ;removes possible routine-coppers
  534.     
  535. gracpr
  536.     movem.l    d0-d7/a0-a6,-(sp)
  537.     lea    cprjmp,a3
  538.     move.l    #cprbck-8,d0        ;copperlist resetten
  539.     move.w    d0,6(a3)
  540.     swap    d0
  541.     move.w    d0,2(a3)
  542.     movem.l    (sp)+,d0-d7/a0-a6
  543.     rts
  544.  
  545. grap                    ;d7=anim
  546.     movem.l    d0-d7/a0-a6,-(sp)
  547.  
  548.     clr.l    d7
  549.  
  550.     tst.l    curpic1            ;current picture ?
  551.     beq    grap.end
  552.  
  553.     move.l    curpic1,a2        ;normal pic halen
  554.  
  555.     lea    gracprscr,a1        ;window neerzetten
  556.     move.l    hogscr,d1
  557.  
  558.     move.w    pic_hgt(a2),d3        ;pic hoogte
  559.     move.w    pic_vew(a2),d5
  560.     btst    #2,d5            ;interlace ?
  561.     beq.s    grap.nohi4
  562.     lsr.w    #1,d3            ;/2
  563. grap.nohi4
  564.     cmp.w    d3,d1
  565.     bge.s    grap.hog
  566.     move.w    d1,d3
  567. grap.hog
  568.     sub.w    d3,d1
  569.     lsr.w    #1,d1
  570.     add.w    #win_str,d1
  571.     move.w    d1,d2
  572.     add.w    d3,d2
  573.  
  574.     move.b    d1,2(a1)        ;y start
  575.     move.b    d2,6(a1)        ;y end
  576.  
  577.     move.w    pic_wid(a2),d4        ;pic breedte in bytes
  578.     lsl.l    #3,d4
  579.  
  580.     move.l    #vew_wid*8,d0
  581.     move.l    #0,d1
  582.     move.l    #$61,d6
  583.  
  584.     cmp.w    #40,pic_wid(a2)        ;overscan ?
  585.     ble.s    grap.noov1
  586.     move.l    #$41,d6
  587. grap.noov1
  588.  
  589.     move.w    pic_vew(a2),d5
  590.     btst    #15,d5            ;hires ?
  591.     beq.s    grap.nohi2
  592.  
  593.     move.l    #(vew_wid)*8*2,d0
  594.     move.l    #1,d1
  595.     move.l    #$61,d6
  596.  
  597.     cmp.w    #80,pic_wid(a2)        ;overscan ?
  598.     ble.s    grap.nohi2
  599.     move.l    #(vew_wid)*8*2,d0
  600.     move.l    #$51,d6
  601.  
  602.     bra.s    grap.noshi2
  603. grap.nohi2    
  604.     btst    #6,d5            ;super hires ?
  605.     beq.s    grap.noshi2
  606.  
  607.     move.l    #(vew_wid)*8*4,d0
  608.     move.l    #2,d1
  609.     move.l    #$61,d6
  610.  
  611.     cmp.w    #80*2,pic_wid(a2)    ;overscan ?
  612.     ble.s    grap.noshi2
  613.     move.l    #(vew_wid)*8*4,d0
  614.     move.l    #$51,d6
  615.  
  616. grap.noshi2    
  617.  
  618.     clr.w    d5
  619.     cmp.w    d0,d4            ;breeder dan scherm ?
  620.     ble.s    grap.c
  621.     move.w    d4,d5
  622.     move.w    d0,d4
  623.     sub.w    d0,d5            ;modulo
  624.     lsr.w    #3,d5            ;/8
  625. grap.c
  626.     lsr.w    d1,d0
  627.     lsr.w    d1,d4
  628.  
  629.     move.w    d0,d2
  630.     sub.w    d4,d2
  631.     lsr.w    #1,d2            ;/2
  632.  
  633.     add.w    d6,d2
  634.     move.b    d2,3(a1)        ;x start
  635.     move.w    d2,d3            ;d3 bewaren !
  636.  
  637.     add.w    d4,d2            ;d4 bewaren !
  638.     move.b    d2,7(a1)        ;x end
  639.     
  640.     move.w    pic_vew(a2),d6
  641.     btst    #15,d6            ;hires ?
  642.     beq.s    grap.nohi5    
  643.     add.l    d4,d4            ;*2
  644.     bra.s    grap.noshi5
  645. grap.nohi5
  646.     btst    #6,d6            ;super hires ?
  647.     beq.s    grap.noshi5    
  648.     add.l    d4,d4            ;*4
  649.     add.l    d4,d4
  650. grap.noshi5
  651.  
  652.     move.l    d7,-(sp)
  653.     move.w    pic_vew(a2),d6
  654.     move.l    #17,d0
  655.     move.l    #4,d1            ;ecs 1
  656.     move.l    #3,d7
  657.  
  658.     btst    #15,d6            ;hires ?
  659.     beq.s    grap.nohi3    
  660.     move.l    #17,d0            ;ecs 9
  661.     move.l    #4,d1            ;ecs 2
  662.     move.l    #2,d7
  663.     bra.s    grap.noshi3
  664. grap.nohi3
  665.     btst    #6,d6            ;super hires ?
  666.     beq.s    grap.noshi3    
  667.     move.l    #17,d0            ;ecs 9
  668.     move.l    #4,d1            ;ecs 2
  669.     move.l    #1,d7
  670. grap.noshi3
  671.     sub.w    d0,d3
  672.     lsr.w    #1,d3
  673.     move.w    d3,10(a1)        ;ddfstrt
  674.     
  675.     move.w    d4,d2            ;pic breedte in pixels
  676.     lsr.w    #4,d2            ;/16
  677.     sub.w    d1,d2            ;-1
  678.  
  679.     lsl.w    d7,d2            ;*8
  680.     add.w    d2,d3
  681.     move.w    d3,14(a1)        ;ddfstop
  682.     move.l    (sp)+,d7
  683.     
  684.     lea    pic_raw(a2),a0
  685.  
  686.     moveq.l    #0,d2
  687.     move.w    pic_dpt(a2),d2
  688.     sub.l    #1,d2
  689.     muls    pic_wid(a2),d2
  690.     add.w    d2,d5
  691.  
  692.     move.w    pic_vew(a2),d2        ;viewmode add
  693.     btst    #2,d2
  694.     beq.s    grap.nolace4
  695.  
  696.     moveq.l    #0,d2
  697.     move.w    pic_dpt(a2),d2
  698.     muls    pic_wid(a2),d2
  699.     add.w    d2,d5            ;interlace gedoe
  700. grap.nolace4
  701.  
  702.     lea    gracprbpl,a4        ;iffpln neerzetten
  703.     lea    gracprpln,a0        ;iffpln neerzetten
  704.     moveq.l    #0,d2
  705.     move.w    pic_dpt(a2),d2        ;plnnummer 1 halen
  706.     move.l    #8,d6            ;copper step !
  707.  
  708.     tst.l    curpic2            ;2de picture ?
  709.     bne.s    grap.pic2
  710. grap.nopic2
  711.     move.w    d5,34(a1)        ;modulo oneven zetten
  712.     bra    grap.nodpl
  713. grap.pic2
  714.     move.l    curpic2,a3        ;oneven plane
  715.     move.l    curpic2+4,a6        ;oneven plane
  716.     move.l    currot2,a5        ;oneven plane
  717.     clr.l    curpic2            ;mischien niet goed
  718.     clr.l    curpic2+4        ;mischien niet goed
  719.     clr.l    curpal2            ;mischien niet goed
  720.     clr.l    currot2            ;mischien niet goed
  721.  
  722.     cmp.l    curpic1,a3        ;picture hetzelfde ?
  723.     beq.s    grap.nopic2
  724.     
  725.     cmp.l    #0,currot1        ;routine ?    
  726.     beq.s    grap.norot
  727.     cmp.l    currot1,a5        ;routine hetzelfde ?
  728.     beq.s    grap.nopic2
  729. grap.norot
  730.     cmp.b    #4,d2            ;> 16 kleuren ? (AGA)
  731.     bgt    grap.nopic2
  732.  
  733.     move.w    pic_dpt(a3),d3        ;plnnummer 2 halen
  734.     cmp.b    d2,d3            ;gelijke plnummers ?
  735.     bne.s    grap.nopic2
  736.     move.w    pic_vew(a2),d1
  737.     cmp.w    pic_vew(a3),d1        ;view gelijk ?
  738.     bne.s    grap.nopic2
  739.  
  740.     move.w    pic_vew(a2),d1        ;groter dan view test
  741.     btst    #6,d1            ;super hires ?
  742.     beq.s    grap.nohi2a
  743.     move.l    #vew_wid*4,d1
  744.     bra.s    grap.nohi2b
  745. grap.nohi2a
  746.     btst    #15,d1            ;hires ?
  747.     beq.s    grap.noshi2a
  748.     move.l    #vew_wid*2,d1
  749.     bra.s    grap.nohi2b
  750. grap.noshi2a
  751.     move.l    #vew_wid,d1
  752. grap.nohi2b
  753.     cmp.w    pic_wid(a2),d1        ;breder dan view ?
  754.     bgt.s    grap.small
  755.     cmp.w    pic_wid(a3),d1        ;breder dan view ?
  756.     bgt.s    grap.small
  757.  
  758.     move.w    pic_vew(a2),d1
  759.     btst    #2,d1
  760.     beq.s    grap.nolace8a
  761.     move.l    hogscr,d1
  762.     add.l    d1,d1
  763.     bra.s    grap.nolace8b
  764. grap.nolace8a
  765.     move.l    hogscr,d1
  766. grap.nolace8b
  767.     cmp.w    pic_hgt(a2),d1        ;hoger dan view ?
  768.     bgt.s    grap.small
  769.     cmp.w    pic_hgt(a3),d1        ;hoger dan view ?
  770.     bgt.s    grap.small
  771.     bra.s    grap.big
  772.  
  773. grap.small
  774.     move.w    pic_hgt(a2),d1        ;wid+hgt<vew
  775.     cmp.w    pic_hgt(a3),d1        ;hoogte gelijk ?
  776.     bne    grap.nopic2
  777.     move.w    pic_wid(a2),d1
  778.     cmp.w    pic_wid(a3),d1        ;breedte gelijk ?
  779.     bne    grap.nopic2
  780.  
  781. grap.big
  782.     move.l    a3,curpic2        ;toch wel goed !
  783.     move.l    a6,curpic2+4
  784.     move.l    a3,curpal2
  785.     move.l    a5,currot2
  786.  
  787.     tst.b    dplctr            ;dual playfield al gezet ?
  788.     beq    grap.nocop
  789.  
  790.     move.w    30(a1),34(a1)        ;modulo copieren
  791.  
  792.     move.w    2(a4),d1        ;bplcon0
  793.     btst    #10,d1            ;al dual playfield ?
  794.     beq.s    grap.ta
  795.  
  796.     move.w    2(a0),10(a0)        ;plane 0>1 copieren
  797.     move.w    6(a0),14(a0)
  798.  
  799.     move.w    18(a0),26(a0)        ;plane 2>3 copieren
  800.     move.w    22(a0),30(a0)
  801.  
  802.     move.w    34(a0),42(a0)        ;plane 4>5 copieren
  803.     move.w    38(a0),46(a0)
  804.  
  805.     move.w    50(a0),58(a0)        ;plane 6>7 copieren
  806.     move.w    54(a0),62(a0)
  807.  
  808.     bra.s    grap.tb
  809. grap.ta
  810.     move.w    24(a0),58(a0)        ;plane 3>7 copieren
  811.     move.w    28(a0),62(a0)
  812.  
  813.     move.w    18(a0),42(a0)        ;plane 2>5 copieren
  814.     move.w    22(a0),46(a0)
  815.  
  816.     move.w    10(a0),26(a0)        ;plane 1>3 copieren
  817.     move.w    14(a0),30(a0)
  818.  
  819.     move.w    2(a0),10(a0)        ;plane 0>1 copieren
  820.     move.w    6(a0),14(a0)
  821.  
  822. grap.tb
  823.     move.l    #palette,a3        ;palette copieren
  824.  
  825.     move.w    #16-1,d1
  826. grap.pal
  827.     move.l    (a3)+,60(a3)
  828.     dbra    d1,grap.pal
  829.  
  830. grap.nocop
  831.     add.w    d3,d2            ;aantal bitplanes
  832.     cmp.w    #8,d2            ;8 bitplanes ?
  833.     blt    grap.no8planes2
  834.     move.w    #%10000,d2        ;only bit 4
  835.     bra    grap.8planes2
  836. grap.no8planes2
  837.     lsl.w    #8,d2
  838.     lsl.w    #4,d2
  839. grap.8planes2
  840.     or.w    #$400,d2        ;dual playfield aan
  841.     move.w    d2,2(a4)        ;bplcon0
  842.  
  843.     movem.l    d0-d7/a0-a6,-(sp)
  844.  
  845.     move.l    curpic,a2        ;animpic ?
  846.     move.l    curfrm,d7
  847.     cmp.l    #0,a2
  848.     bne.s    grap.noanipic
  849.  
  850.     move.l    curpic2,a2        ;normal pic ?
  851.     move.l    curfrm2,d7
  852.     cmp.l    #0,a2
  853.     beq.s    grap.nodplpic
  854.  
  855. grap.noanipic
  856.     add.l    d6,a0
  857.     add.w    d6,d6
  858.     bsr.s    grappln            ;a2,d6,d7,d0
  859. grap.nodplpic
  860.     movem.l    (sp)+,d0-d7/a0-a6
  861.     add.w    d6,d6
  862.     bra.s    grap.nodpla
  863.  
  864.  
  865. grap.nodpl                ;geen dual playfield
  866.     cmp.w    #8,d2            ;8 bitplanes ?
  867.     blt    grap.no8planes
  868.     move.w    #%10000,d2        ;only bit 4
  869.     bra    grap.8planes
  870. grap.no8planes
  871.     lsl.w    #8,d2
  872.     lsl.w    #4,d2
  873. grap.8planes
  874.     move.w    d2,2(a4)        ;bplcon0
  875.  
  876. grap.nodpla
  877.     move.w    d5,30(a1)        ;modulo even
  878.  
  879.     moveq.l    #0,d3
  880.     add.w    pic_vew(a2),d3        ;viewmode add
  881.     moveq.l    #0,d2
  882.     move.w    2(a4),d2
  883.     or.l    d3,d2
  884.  
  885.     ifd    gui
  886.     tst.b    genlck
  887.     bne    grap.genset
  888.     endc
  889.  
  890.     or.l    #$100,d2        ;genlock off ($302)
  891.  
  892.     ifd    gui
  893.     bra    grap.gencont
  894. grap.genset
  895.     or.l    #$102,d2        ;genlock on ($302)
  896. grap.gencont
  897.     endc
  898.     
  899.     move.w    d2,2(a4)
  900.     
  901.     bsr.s    grappln            ;a2,d6,d7,d0
  902.  
  903. grap.end
  904.     
  905.     movem.l    (sp)+,d0-d7/a0-a6
  906.     rts
  907.         
  908.  
  909.     ;sets on of the 2 possible pictures to the copper
  910.     ;handles interlace
  911.  
  912.     ;d7=framenummer
  913.     ;d6=copperliststap
  914.     ;d0=raw planes positie
  915.     ;a2=current picture
  916. grappln                    ;planes invullen 
  917.     movem.l    d0-d7/a0-a6,-(sp)
  918.  
  919.     lea    pic_raw(a2),a1
  920.     move.l    a1,d0            ;raw planes
  921.     
  922.     moveq.l    #0,d2            ;x*y
  923.     move.w    pic_wid(a2),d2
  924.     lsr.l    #1,d2            ;/2
  925.     moveq.l    #0,d3
  926.     move.w    pic_hgt(a2),d3
  927.     muls    d3,d2
  928.     
  929.     move.l    d2,d4
  930.     add.l    d2,d2
  931.  
  932.     move.w    pic_dpt(a2),d3
  933.     muls    d3,d4            ;hele picture size
  934.     muls    d7,d4            ;frame*size d7 !!!
  935.  
  936.     add.l    d4,d4
  937.  
  938.     add.l    d4,d0
  939.  
  940.     move.l    #vew_wid,d5        ;max x view
  941.     move.l    hogscr,d4        ;max y view
  942.     move.w    pic_vew(a2),d1        ;viewmode add
  943.     btst    #2,d1
  944.     beq.s    grappln.nolace
  945.     add.l    d4,d4            ;max y view
  946. grappln.nolace
  947.     btst    #15,d1            ;hires ?
  948.     beq.s    grappln.nohi
  949.     move.l    #vew_wid*2,d5        ;max x view
  950.     bra.s    grappln.noshi
  951. grappln.nohi
  952.     btst    #6,d1            ;super hires ?
  953.     beq.s    grappln.noshi
  954.     move.l    #vew_wid*4,d5        ;max x view
  955. grappln.noshi
  956.  
  957.     moveq.l    #0,d3            ;scherm centreren
  958.     move.w    pic_wid(a2),d3        ;pic breedte in bytes
  959.     cmp.w    d5,d3            ;breder dan scherm ?
  960.     ble.s    grappln.qa
  961.     sub.w    d5,d3            ;-scherm breedte
  962.     lsr.w    #2,d3            ;/4
  963.  
  964.     add.l    d3,d3
  965.  
  966.     add.l    d3,d0
  967. grappln.qa
  968.     move.w    pic_hgt(a2),d3        ;pic hoogte in bytes
  969.     cmp.w    d4,d3            ;hoger dan scherm ?
  970.     ble.s    grappln.qb
  971.     sub.w    d4,d3            ;-scherm breedte
  972.     lsr.w    #1,d3            ;/2
  973.     moveq.l    #0,d5
  974.     move.w    pic_wid(a2),d5        ;pic breedte in bytes
  975.     muls    pic_dpt(a2),d5
  976.     muls    d5,d3
  977.     add.l    d3,d0
  978. grappln.qb
  979.     moveq.l    #0,d2
  980.     move.w    pic_wid(a2),d2
  981.  
  982.     move.w    pic_vew(a2),d5        ;interlace flipping ?
  983.     btst    #2,d5
  984.     beq.s    grappln.nolac7b
  985.  
  986.     move.w    $04(a6),d5        ;even/oneven ?
  987.     btst    #15,d5
  988.     beq.s    grappln.nolac7b
  989.     
  990.     moveq.l    #0,d3
  991.     move.w    pic_wid(a2),d3
  992.     muls    pic_dpt(a2),d3
  993.     add.l    d3,d0
  994. grappln.nolac7b
  995.  
  996.     move.w    pic_dpt(a2),d1        ;plnnummer 1 halen
  997.     tst.w    d1            ;0 planes ?
  998.     beq    grappln.end
  999.     sub.w    #1,d1
  1000. grappln.a
  1001.     move.w    d0,3*2(a0)
  1002.     swap    d0
  1003.     move.w    d0,1*2(a0)
  1004.     swap    d0
  1005.     add.l    d6,a0            ;d6=copper step !
  1006.     add.l    d2,d0
  1007.     dbra    d1,grappln.a
  1008.  
  1009.     cmp.w    #8,pic_dpt(a2)        ;8 planes ?
  1010.     bne    grappln.noham8
  1011.     btst    #3,pic_vew(a2)        ;ham ?
  1012.     beq    grappln.noham8
  1013.  
  1014.     move.w    -14(a0),d0        ;get 6
  1015.     move.w    -10(a0),d1
  1016.     move.w    -6(a0),d2        ;get 7
  1017.     move.w    -2(a0),d3
  1018.     move.w    -18(a0),-2(a0)        ;5>7
  1019.     move.w    -22(a0),-6(a0)        ;5>7
  1020.     move.w    -26(a0),-10(a0)        ;4>6
  1021.     move.w    -30(a0),-14(a0)        ;4>6
  1022.     move.w    -34(a0),-18(a0)        ;3>5
  1023.     move.w    -38(a0),-22(a0)        ;3>5
  1024.     move.w    -42(a0),-26(a0)        ;2>4
  1025.     move.w    -46(a0),-30(a0)        ;2>4
  1026.     move.w    -50(a0),-34(a0)        ;1>3
  1027.     move.w    -54(a0),-38(a0)        ;1>3
  1028.     move.w    -58(a0),-42(a0)        ;0>2
  1029.     move.w    -62(a0),-46(a0)        ;0>2
  1030.     move.w    d0,-62(a0)        ;6>0
  1031.     move.w    d1,-58(a0)        ;6>0
  1032.     move.w    d2,-54(a0)        ;7>1
  1033.     move.w    d3,-50(a0)        ;7>1
  1034. grappln.noham8
  1035.  
  1036. grappln.end
  1037.     movem.l    (sp)+,d0-d7/a0-a6
  1038.     rts
  1039.  
  1040.     ;sets palettes to palette-buffer
  1041.     
  1042. grac
  1043.     movem.l    d0-d7/a0-a6,-(sp)
  1044.  
  1045.     lea    curpal1,a3        ;palette 1
  1046.     move.l    #palette,a1
  1047.     bsr.s    gracfrm
  1048.  
  1049.     lea    curpal2,a3        ;palette 2 (dpl)
  1050.     move.l    #16*4+palette,a1
  1051.     bsr.s    gracfrm
  1052.     
  1053.     bsr    palctr            ;palette-buffer to copper
  1054. grac.end
  1055.     movem.l    (sp)+,d0-d7/a0-a6
  1056.     rts
  1057.         
  1058.     ;moves palette from picture to palette-buffer
  1059.  
  1060. gracfrm
  1061.     movem.l    d0-d7/a0-a6,-(sp)
  1062.     tst.l    (a3)            ;palette aanwezig ?
  1063.     beq.s    gracfrm.end
  1064.  
  1065.     move.l    (a3),a2            ;current palette
  1066.     
  1067.     cmp.l    #'PALE',(a2)        ;palette ?
  1068.     bne.s    gracfrm.pict
  1069.     lea    6(a2),a0        ;palette
  1070.     move.w    4(a2),d0        ;aantal kleuren
  1071.     bra.s    gracfrm.col
  1072. gracfrm.pict
  1073.     cmp.l    #'ANIM',(a2)        ;animatie ?
  1074.     bne.s    gracfrm.noanim
  1075.  
  1076.     moveq.l    #0,d1
  1077.     move.w    pic_ani(a2),d1
  1078.     bclr    #7,d1            ;behandelbit weghalen
  1079.  
  1080.     moveq.l    #0,d3
  1081.     move.w    pic_wid(a2),d3
  1082.     lsr.w    #1,d3            ;/2
  1083.     muls    pic_hgt(a2),d3
  1084.     muls    pic_dpt(a2),d3
  1085.  
  1086.     add.l    d3,d3
  1087.  
  1088.     add.l    #pic_raw,d3
  1089.     move.l    d3,d5
  1090.  
  1091.     btst    #0,d1
  1092.     bne.s    gracfrm.buf2
  1093.     moveq.l    #0,d5
  1094. gracfrm.buf2
  1095.     add.l    d5,a2
  1096. gracfrm.noanim
  1097.     lea    pic_pal(a2),a0        ;palette
  1098.     move.w    pic_palnum(a2),d0
  1099.  
  1100.     tst.w    d0            ;0 planes ?
  1101.     beq.s    gracfrm.end
  1102. gracfrm.col
  1103. gracfrm.fa
  1104.     move.l    (a0)+,(a1)+
  1105.     dbra    d0,gracfrm.fa
  1106. gracfrm.end
  1107.     movem.l    (sp)+,d0-d7/a0-a6
  1108.     rts
  1109.     
  1110.     ;handles colorcycling in the palette-buffer
  1111.  
  1112. palcycctr
  1113.     movem.l    d0-d7/a0-a6,-(sp)
  1114.  
  1115.     move.l    curpic1,a2        ;current raw
  1116.     cmp.l    #0,a2
  1117.     beq.s    palcycctr.qb
  1118.     lea    cycdel1,a3        ;cycle delays
  1119.     move.l    #paltab,a4
  1120.     bsr    palcyc
  1121. palcycctr.qb
  1122.     move.l    curpic2,a2        ;current raw
  1123.     cmp.l    #0,a2
  1124.     beq.s    palcycctr.c
  1125.     lea    cycdel2,a3        ;cycle delays
  1126.     move.l    #16*2+paltab,a4
  1127.     bsr    palcyc
  1128. palcycctr.c
  1129.     movem.l    (sp)+,d0-d7/a0-a6
  1130.     rts
  1131.     
  1132.     ;copies palette-buffer to copper
  1133.  
  1134. palctr
  1135.     movem.l    d0-d7/a0-a6,-(sp)
  1136.  
  1137.     lea    gracprcol,a1        ;AGA
  1138.     move.l    #palette,a0
  1139.     move.l    #paltab,a2
  1140.     move.w    #8-1,d6
  1141. palctr.e
  1142.     move.w    #32-1,d7
  1143. palctr.d
  1144.     move.w    (a2)+,d0            ;get cycle-position
  1145.     move.w    (a0,d0),6(a1)            ;high RGB bits
  1146.     move.w    2(a0,d0),((32+1)*4)+6(a1)    ;low RGB bits
  1147.     add.l    #4,a1
  1148.     dbra    d7,palctr.d
  1149.     add.l    #((32+2)*4),a1
  1150.     dbra    d6,palctr.e
  1151. palctr.end
  1152.     movem.l    (sp)+,d0-d7/a0-a6
  1153.     rts
  1154.  
  1155.     ;reset palette tabel, for proper color cycling
  1156.  
  1157. paltabres
  1158.     movem.l    d0-d7/a0-a6,-(sp)
  1159.     lea    paltab,a0
  1160.     clr.l    d0
  1161.     move.w    #256-1,d1
  1162. paltabres.a
  1163.     move.w    d0,(a0)+
  1164.     add.w    #4,d0            ;aga color words, high RGB + low RGB
  1165.     dbra    d1,paltabres.a
  1166. paltabres.end
  1167.     movem.l    (sp)+,d0-d7/a0-a6
  1168.     rts
  1169.  
  1170.     ;colorcyclinghandling of a palette
  1171.  
  1172. palcyc
  1173.     movem.l    d0-d7/a0-a6,-(sp)
  1174.     move.w    #4-1,d7            ;4 cycles
  1175. palcyc.d
  1176.     tst.w    (a3)+            ;delay klaar ?
  1177.     bne.s    palcyc.c
  1178.     
  1179.     moveq.l    #0,d1
  1180.     move.b    pic_cycstr(a2),d1    ;start color
  1181.     lsl.b    #1,d1        ;*2
  1182.  
  1183.     moveq.l    #0,d2
  1184.     move.b    pic_cycend(a2),d2    ;end color
  1185.     lsl.b    #1,d2        ;*2
  1186.  
  1187.     moveq.l    #0,d3
  1188.     move.b    pic_cycadd(a2),d3    ;richting
  1189.  
  1190.     move.l    a4,a0            ;palette pointer
  1191.     move.l    a0,a1
  1192.     add.l    d1,a0            ;startcolor
  1193.     add.l    d2,a1            ;endcolor
  1194.     
  1195.     cmp.b    #1,d3            ;omhoog
  1196.     beq.s    palcyc.up    
  1197.     cmp.b    #3,d3            ;omlaag
  1198.     beq.s    palcyc.down
  1199.     bra.s    palcyc.i
  1200.  
  1201. palcyc.up                ;kleuren copieren
  1202.     move.w    (a1),d4            ;laatst color bewaren
  1203. palcyc.f                ;kleuren copieren
  1204.     cmp.l    a0,a1
  1205.     beq.s    palcyc.fa
  1206.     move.w    -(a1),2(a1)
  1207.     bra.s    palcyc.f
  1208. palcyc.fa
  1209.     move.w    d4,(a1)
  1210.     bra.s    palcyc.g    
  1211.     
  1212. palcyc.down
  1213.     move.w    (a0),d4            ;laatst color bewaren
  1214. palcyc.h                ;kleuren copieren
  1215.     cmp.l    a0,a1
  1216.     beq.s    palcyc.ha
  1217.     move.w    2(a0),(a0)+
  1218.     bra.s    palcyc.h
  1219. palcyc.ha
  1220.     move.w    d4,(a1)
  1221.  
  1222. palcyc.g
  1223.     move.b    pic_cycspd(a2),-1(a3)    ;delay zetten
  1224.     bra.s    palcyc.i
  1225. palcyc.c
  1226.     sub.w    #1,-2(a3)        ;cycle delay aftellen
  1227. palcyc.i
  1228.     add.l    #4,a2            ;next cycle info
  1229.     dbra    d7,palcyc.d
  1230.  
  1231. palcyc.qb
  1232.     movem.l    (sp)+,d0-d7/a0-a6
  1233.     rts
  1234.  
  1235.  
  1236.  
  1237. ;    SECTION    variabelen,DATA_c
  1238.  
  1239.     cnop    0,2
  1240. curtsk        dc.l    0
  1241. tskpri        dc.l    0
  1242. duplok        dc.l    0
  1243. inttel        dc.l    0
  1244. intdel        dc.l    0
  1245.  
  1246. form        dc.l    0
  1247. ifffil        dc.l    0
  1248. intvbold    dc.l    0
  1249. inttbeold    dc.l    0
  1250. patpos        dc.l    0
  1251. gfxlib        dc.l    0
  1252. doslib        dc.l    0
  1253. wbview      dc.l    0
  1254. mt_data        dc.l    0
  1255. memvid        dc.l    0
  1256. oldcprlist    dc.l    0
  1257. hogscr        dc.l    vew_hgt
  1258.  
  1259. inspos        dc.l    -1
  1260. anispd1        dc.w    1    ;nooit op 0 !
  1261. anispd2        dc.w    1
  1262.  
  1263.         cnop    0,2
  1264. varclr.s            ;start wissen
  1265. oldrot        dc.l    0
  1266. curpic        dc.l    0
  1267. curfrm        dc.l    0
  1268. cycdel1        ds.w    4
  1269. cycdel2        ds.w    4
  1270.  
  1271. rotinf1        dc.w    0
  1272. rotinf2        dc.w    0
  1273.  
  1274. effspd        dc.w    0
  1275. efflop        dc.b    0
  1276. anilop1        dc.b    0
  1277. anilop2        dc.b    0
  1278. anipal1        dc.b    0
  1279. anipal2        dc.b    0
  1280. rotdpl        dc.b    1
  1281. rottrg        dc.b    0
  1282. dplctr        dc.b    0
  1283.         cnop    0,2
  1284.  
  1285. insdat        ds.l    4
  1286. inspri        dc.l    0
  1287. instel        dc.w    0
  1288.  
  1289. cureff        dc.l    0
  1290. efftel        dc.w    0
  1291.  
  1292. curpal1        dc.l    0
  1293. curpal2        dc.l    0
  1294. currot1        dc.l    0
  1295. currot2        dc.l    0
  1296. curpic1        dc.l    0
  1297. curpic2        dc.l    0
  1298. anitel1        dc.w    0
  1299. anitel2        dc.w    0
  1300. curfrm1        dc.l    0
  1301. curfrm2        dc.l    0
  1302. oldfrm1        dc.l    0
  1303. oldfrm2        dc.l    0
  1304.  
  1305. varclr.e
  1306.         dc.l    0            ;wisruimte
  1307.     
  1308. varclr.ql    equ    varclr.e-varclr.s    ;wislengte
  1309.     
  1310. ntscmode    dc.b    0
  1311. end        dc.b    0
  1312.  
  1313. pronam    dc.b    'VideoTracker',0
  1314.     cnop    0,2
  1315. dosnam    dc.b    'dos.library',0
  1316.     cnop    0,4
  1317. gfxnam    dc.b    'graphics.library',0
  1318.     cnop    0,4
  1319.     
  1320.     cnop    0,4
  1321. gra.s            ;copperlist edit buffer
  1322. gracprscr
  1323.     dc.w    $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
  1324. gracprbpl
  1325.     dc.w    $100,$0000,$102,$0000,$104,$0020
  1326.     dc.w    $108,$0000,$10a,$0000,$1fc,$0003
  1327. gracprpln
  1328.     dc.w    $e0,$0000,$e2,$0000    ;1
  1329.     dc.w    $e4,$0000,$e6,$0000    ;2
  1330.     dc.w    $e8,$0000,$ea,$0000    ;3
  1331.     dc.w    $ec,$0000,$ee,$0000    ;4
  1332.     dc.w    $f0,$0000,$f2,$0000    ;5
  1333.     dc.w    $f4,$0000,$f6,$0000    ;6
  1334.     dc.w    $f8,$0000,$fa,$0000    ;7
  1335.     dc.w    $fc,$0000,$fe,$0000    ;8
  1336. gracprcol
  1337.     dc.w    $106,$0000
  1338.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1339.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1340.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1341.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1342.     dc.w    $106,$0200
  1343.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1344.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1345.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1346.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1347.  
  1348.     dc.w    $106,$2000
  1349.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1350.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1351.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1352.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1353.     dc.w    $106,$2200
  1354.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1355.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1356.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1357.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1358.  
  1359.     dc.w    $106,$4000
  1360.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1361.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1362.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1363.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1364.     dc.w    $106,$4200
  1365.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1366.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1367.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1368.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1369.  
  1370.     dc.w    $106,$6000
  1371.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1372.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1373.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1374.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1375.     dc.w    $106,$6200
  1376.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1377.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1378.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1379.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1380.  
  1381.     dc.w    $106,$8000
  1382.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1383.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1384.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1385.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1386.     dc.w    $106,$8200
  1387.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1388.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1389.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1390.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1391.  
  1392.     dc.w    $106,$a000
  1393.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1394.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1395.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1396.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1397.     dc.w    $106,$a200
  1398.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1399.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1400.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1401.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1402.  
  1403.     dc.w    $106,$c000
  1404.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1405.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1406.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1407.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1408.     dc.w    $106,$c200
  1409.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1410.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1411.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1412.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1413.  
  1414.     dc.w    $106,$e000
  1415.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1416.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1417.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1418.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1419.     dc.w    $106,$e200
  1420.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1421.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1422.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1423.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1424.  
  1425.     dc.w    $106,$1000
  1426.  
  1427. cprjmp
  1428.     dc.w    $080,0,$082,0
  1429. gra.e
  1430. gra.ql    equ    gra.e-gra.s        ;block lengte
  1431.  
  1432. cpr                    ;real copperlist
  1433.     dc.w    $0001,$fffe
  1434.     dc.w    $09c,$8001        ;tbeint
  1435. cprspr
  1436.     dc.w    $120,$0000,$122,$0000
  1437.     dc.w    $124,$0000,$126,$0000
  1438.     dc.w    $128,$0000,$12a,$0000
  1439.     dc.w    $12c,$0000,$12e,$0000
  1440.     dc.w    $130,$0000,$132,$0000
  1441.     dc.w    $134,$0000,$136,$0000
  1442.     dc.w    $138,$0000,$13a,$0000
  1443.     dc.w    $13c,$0000,$13e,$0000
  1444.  
  1445. cprbuf
  1446.     dc.w    $8e,$3381,$90,$81c1,$92,$003c,$94,$00d0
  1447.     dc.w    $100,$9000,$102,$0000,$104,$0020
  1448.     dc.w    $108,$0000,$10a,$0000,$1fc,$0003
  1449.  
  1450.     dc.w    $e0,$0000,$e2,$0000    ;0
  1451.     dc.w    $e4,$0000,$e6,$0000    ;1
  1452.     dc.w    $e8,$0000,$ea,$0000    ;2
  1453.     dc.w    $ec,$0000,$ee,$0000    ;3
  1454.     dc.w    $f0,$0000,$f2,$0000    ;4
  1455.     dc.w    $f4,$0000,$f6,$0000    ;5
  1456.     dc.w    $f8,$0000,$fa,$0000    ;6
  1457.     dc.w    $fc,$0000,$fe,$0000    ;7
  1458.  
  1459.     dc.w    $106,$0000
  1460.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1461.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1462.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1463.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1464.     dc.w    $106,$0200
  1465.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1466.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1467.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1468.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1469.  
  1470.     dc.w    $106,$2000
  1471.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1472.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1473.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1474.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1475.     dc.w    $106,$2200
  1476.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1477.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1478.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1479.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1480.  
  1481.     dc.w    $106,$4000
  1482.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1483.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1484.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1485.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1486.     dc.w    $106,$4200
  1487.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1488.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1489.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1490.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1491.  
  1492.     dc.w    $106,$6000
  1493.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1494.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1495.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1496.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1497.     dc.w    $106,$6200
  1498.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1499.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1500.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1501.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1502.  
  1503.     dc.w    $106,$8000
  1504.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1505.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1506.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1507.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1508.     dc.w    $106,$8200
  1509.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1510.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1511.      dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1512.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1513.  
  1514.     dc.w    $106,$a000
  1515.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1516.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1517.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1518.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1519.     dc.w    $106,$a200
  1520.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1521.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1522.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1523.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1524.  
  1525.     dc.w    $106,$c000
  1526.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1527.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1528.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1529.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1530.     dc.w    $106,$c200
  1531.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1532.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1533.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1534.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1535.  
  1536.     dc.w    $106,$e000
  1537.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1538.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1539.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1540.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1541.     dc.w    $106,$e200
  1542.     dc.w    $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  1543.     dc.w    $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  1544.     dc.w    $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0
  1545.     dc.w    $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0
  1546.  
  1547.     dc.w    $106,$1000
  1548.  
  1549.     dc.w    $080,0,$082,0
  1550. cprbuf.e
  1551.  
  1552.     dc.w    $088,$0000        ;copjmp2
  1553.     dc.w    $080,0,$082,0        ;moet achter cprbck blijven !
  1554. cprbck
  1555. sprdat
  1556.     dc.w    $ffff,$fffe
  1557.  
  1558. palette        ds.l    256        ;palette 24-bits, far out !
  1559. paltab        ds.w    256        ;palette cycle-tabel
  1560.  
  1561.     cnop    0,2
  1562. var    ds.b    $300    ;variabelen voor routines
  1563.  
  1564.     
  1565. ;    SECTION    10,CODE_C
  1566.         endc
  1567.  
  1568. ; this is the routine-source
  1569. ;**********************************************************************
  1570.  
  1571. ;Test_Vec
  1572. ;mx68882        ;gebruik 68882 routine
  1573. ;copperspeed        ;gebruik copperbar om snelheid te meten
  1574. ;Nodraw            ;tekent geen lijnen om snelheid beter te meten
  1575.  
  1576. ;    mc68882
  1577. ;    machine 68882    ;in devpac 3: Machine 68882 dacht ik...
  1578.             ;Ik heb dit met maxxon gemaakt...
  1579.  
  1580. ;    assembleren met devpac, dan met hunkwizard of zoiets
  1581. ;    absoluut maken naar bijv. $80000 om de hunks enzo
  1582. ;    weg te halen, het eerste lonword moet "ROUT" zijn
  1583. ;    uiteindelijk, kijk uit dat hij volledig position-
  1584. ;    independent blijft (geeft devpac aan en hw ook)
  1585.  
  1586.  
  1587.     ;hier staan de picture-tabel offsets,begint met
  1588.     ;longword "PICT"
  1589.  
  1590. ;vew_wid    equ    44
  1591. ;vew_hgt    equ    290
  1592.  
  1593. ;pic_wid    equ    4        ;width in bytes
  1594. ;pic_hgt    equ    6        ;hoogte in lijnen
  1595. ;pic_dpt    equ    8        ;number of planes
  1596. ;pic_ani    equ    10        ;aantal frames (anim)
  1597. ;pic_vew    equ    12        ;viewmode (bplcon0)
  1598.  
  1599.     ;4 cycles mogelijk (deluxe paint)
  1600.  
  1601. ;pic_cycstr    equ    14        ;cycle start (*4)
  1602. ;pic_cycend    equ    15        ;cycle end (*4)
  1603. ;pic_cycspd    equ    16        ;cycle speed (*4)
  1604. ;pic_cycadd    equ    17        ;cycle add (*4)
  1605. ;pic_palnum    equ    30        ;aantal kleuren -1 (dbra)
  1606. ;pic_pal    equ    32        ;palette start
  1607. ;pic_palsiz    equ    256*2        ;vaste palette size
  1608.                     ;256 kleuren mogelijk
  1609. ;pic_raw    equ    pic_pal+pic_palsiz    ;raw planes start
  1610.  
  1611.     ;zo opgebouwd:
  1612.     ;plane 0 row 0
  1613.     ;plane 1 row 0
  1614.     ;plane 2 row 0
  1615.     ;plane 0 row 1
  1616.     ;plane 1 row 1
  1617.     ;plane 2 row 1
  1618.     ;voor snellere blits
  1619.     
  1620.     ;dit is de vector-tabel, imagine en rot3d worden
  1621.     ;in vt omgezet naar een eigen vector-tabel
  1622.     ;ik heb een losse voorbeeld.bin erbij gepacked
  1623.     ;begint met "VECT"
  1624.  
  1625.  
  1626.         ifnd    ocs
  1627. vec_xyzlen    equ    $4        ;lengte xyzc tabel
  1628. vec_pollen    equ    $8        ;lengte polygoon tabel
  1629. vec_faclen    equ    $c        ;lengte face tabel
  1630. vec_palnum    equ    $10        ;aantal kleuren
  1631. vec_pal        equ    $12        ;palette
  1632. vec_xyz        equ    256*4+vec_pal    ;start xyzc tabel
  1633. vec_xyznum    equ    vec_xyz        ;aantal xyzc's
  1634. vec_len        equ    vec_xyz+4    ;minimale lengte
  1635.         endc
  1636.         
  1637.         ifd    ocs
  1638.  
  1639. vec_siz        equ    vew_hgt        ;vergroting
  1640. vec_xyzlen    equ    $4        ;lengte xyzc tabel
  1641.  
  1642.     ;xyzc tabel:
  1643.     ;aantal xyzc's  -1        word
  1644.     ;x,y,z coordinaten en c (kleur) in words
  1645.  
  1646. vec_pollen    equ    $8        ;lengte polygoon tabel
  1647.     
  1648.     ;polygonen tabel: (uit mijn hoofd, bugvrij ?)
  1649.     ;aantal poly's -1        word
  1650.     ;poly 1 aantal lijnen -1    word
  1651.     ;poly 1 lijn 1 xyzc 1 xyzc 2    word,word,xyzc-tabel nummer
  1652.     ;poly 1 lijn 2 xyzc 1 xyzc 2    word,word
  1653.     ;etc.
  1654.     
  1655. vec_palnum    equ    $10        ;aantal kleuren -1 (dbra)
  1656. vec_pal        equ    $12        ;palette in words (256)
  1657. vec_xyz        equ    256*2+vec_pal    ;start xyzc tabel
  1658. vec_xyznum    equ    vec_xyz        ;aantal xyzc's
  1659.  
  1660.         endc
  1661.         
  1662.     ;de variabelen-tabel, geeft nuttige informatie
  1663.     ;voor de routines
  1664.     ;de huidige tabel bevat meer info maar dat heeft de
  1665.     ;vectorroutine toch niet nodig
  1666.  
  1667. ;var_gfxlib    equ    $000        ;graphics lib
  1668. ;var_pic    equ    $004        ;current picture 1
  1669. ;var_anispd1    equ    $008        ;animspeed
  1670. ;var_anitel1    equ    $00c        ;animspeed
  1671. ;var_cprbck    equ    $010        ;copperback
  1672. ;var_bck    equ    $014        ;background
  1673. ;var_ntsc    equ    $01c        ;frequency
  1674. ;var_txt1    equ    $040        ;text
  1675. ;var_txt16    equ    15*4+var_txt1
  1676. ;var_fon1    equ    $0c0        ;fonts
  1677. ;var_fon16    equ    15*4+var_fon1
  1678. ;var_vec1    equ    $080        ;vectors
  1679. ;var_vec64    equ    63*4+var_vec1
  1680. ;var_obj1    equ    $180        ;objects
  1681. ;var_obj64    equ    63*4+var_obj1
  1682.  
  1683.  
  1684.  
  1685. rot_vewh    equ    0;$8000        ;bplcon0 width-mode low-res/hi-res
  1686. rot_vewl    equ    0;$4        ;bplcon0 heigth-mode no-lace/interlace
  1687. rot_vew        equ    rot_vewh+rot_vewl
  1688. rot_dpt        equ    1        ;aantal planes (depth)
  1689.  
  1690. ;shade    ;als dit label aan staat, is het de vectorshade routine
  1691.     ;(1 plane,6 buffers,copperlijst)
  1692.  
  1693.     ifeq    rot_vewh-0
  1694.     ifeq    rot_dpt-1
  1695. rot_blit    equ    1        ;aantal clear blits
  1696.     endc
  1697.     ifeq    rot_dpt-2
  1698. rot_blit    equ    1        ;aantal clear blits
  1699.     endc
  1700.     ifeq    rot_dpt-3
  1701. rot_blit    equ    1        ;aantal clear blits
  1702.     endc
  1703.     ifeq    rot_dpt-4
  1704. rot_blit    equ    2        ;aantal clear blits
  1705.     endc
  1706.     ifeq    rot_dpt-5
  1707. rot_blit    equ    2        ;aantal clear blits
  1708.     endc
  1709.     ifeq    rot_dpt-6
  1710. rot_blit    equ    2        ;aantal clear blits
  1711.     endc
  1712.     endc
  1713.     
  1714.     ifeq    rot_vewh-$8000
  1715.     ifeq    rot_dpt-1
  1716. rot_blit    equ    1        ;aantal clear blits
  1717.     endc
  1718.     ifeq    rot_dpt-2
  1719. rot_blit    equ    2        ;aantal clear blits
  1720.     endc
  1721.     ifeq    rot_dpt-3
  1722. rot_blit    equ    2        ;aantal clear blits
  1723.     endc
  1724.     ifeq    rot_dpt-4
  1725. rot_blit    equ    3        ;aantal clear blits
  1726.     endc
  1727.     endc
  1728.     
  1729.         ifeq    rot_vewh-0
  1730. bck_wid        equ    vew_wid        ;view width
  1731. rot_wid        equ    (384/8)        ;breedte planes
  1732. rot_drot    equ    256        ;max. grote vectorobj
  1733.         ifd    ocs
  1734. rot_cen        equ    0
  1735.         endc
  1736.         ifnd    ocs
  1737. rot_cen        equ    8
  1738.         endc
  1739.         endc
  1740.         ifeq    rot_vewh-$8000
  1741. bck_wid        equ    vew_wid*2
  1742. rot_wid        equ    (384/8)*2
  1743. rot_drot    equ    256*2
  1744.         ifd    ocs
  1745. rot_cen        equ    8
  1746.         endc
  1747.         ifnd    ocs
  1748. rot_cen        equ    0
  1749.         endc
  1750.         endc
  1751.  
  1752.         ifeq    rot_vewl-$0
  1753. bck_hgt        equ    vew_hgt        ;viewable hoogte
  1754. rot_hgt        equ    384        ;hoogte planes
  1755.         endc
  1756.         ifeq    rot_vewl-$4
  1757. bck_hgt        equ    vew_hgt*2
  1758. rot_hgt        equ    384*2
  1759.         endc
  1760.  
  1761.  
  1762.  
  1763.     
  1764. ;    a0=variabelen tabel        (adres tabel)
  1765. ;    d0=routinfo            (routinemode-waarde)
  1766.  
  1767.     SECTION    3,CODE
  1768.     cnop    0,8
  1769. rot
  1770. rotp
  1771.     ifnd    ocs
  1772.     dc.l    'ROTA'            ;effect-longword-ID
  1773.     endc
  1774.     
  1775.     ifd    ocs
  1776.     dc.l    'ROTO'            ;effect-longword-ID
  1777.     endc
  1778.  
  1779.     movem.l    d2-d7/a1-a6,-(sp)
  1780.  
  1781.     lea    rot,a6            ;a6 prog base (zorgt ervoor
  1782.                     ;dat deze routine overal
  1783.                     ;in het geheugen kan staan)
  1784.     ifd    rout
  1785.     move.l    #rotc,a2
  1786.     endc
  1787.     move.l    a2,rotchp-rot(a6)
  1788.  
  1789.     lea    ($dff000).l,a5        ;a5 gebruikt ik in de hele file
  1790.  
  1791.     ifd    shade
  1792.     move.l    rotchp-rot(a6),a1
  1793.     add.l    #rotcop-rotc,a1        ;copperback invullen
  1794.     move.l    var_cprbck(a0),d1    ;copperlist terugjump
  1795.     sub.l    #8,d1            ;adres naar vt-copperlist
  1796.     move.w    d1,6(a1)
  1797.     swap    d1
  1798.     move.w    d1,2(a1)
  1799.     endc
  1800.     
  1801.     ifnd    shade
  1802.     move.l    rotchp-rot(a6),a3
  1803.     add.l    #rotpal1-rotc,a3        ;palette van zichtbare
  1804.     move.l    a3,a4            ;buffer naar werkbuffer
  1805.     move.l    real-rot(a6),d1
  1806.     add.l    d1,a3            ;destination
  1807.     eor.l    #rotpic_l,d1
  1808.     add.l    d1,a4            ;source
  1809.     move.w    #1,d1
  1810.     lsl.w    #rot_dpt,d1
  1811.     sub.w    #1,d1
  1812. rotpalcop.c                ;palette
  1813.     ifd    ocs
  1814.     move.w    (a4)+,(a3)+
  1815.     endc
  1816.     ifnd    ocs
  1817.     move.l    (a4)+,(a3)+
  1818.     endc
  1819.     dbra    d1,rotpalcop.c
  1820.     endc
  1821.  
  1822.     lea    var_obj1(a0),a2        ;copy current balls 
  1823.     lea    rotbaltab-rot(a6),a1
  1824.     move.w    #16-1,d1
  1825. rotbal.cop
  1826.     move.l    (a2)+,(a1)+
  1827.     dbra    d1,rotbal.cop
  1828.  
  1829.     tst.l    var_vec1(a0)        ;nieuwe vector ?
  1830.     beq.s    rot.novec
  1831.     move.l    var_vec1(a0),a1        ;halen
  1832.     clr.l    var_vec1(a0)        ;wissen
  1833.     cmp.l    curvec-rot(a6),a1    ;zelfde ?
  1834.     beq.s    rot.novec        ;palette niet copieren
  1835.     move.l    a1,curvec-rot(a6)    ;current vector
  1836.  
  1837.     ifnd    shade
  1838.     move.w    vec_palnum(a1),d1
  1839.     cmp.w    #-1,d1            ;geen kleuren ?
  1840.     beq.s    rot.novec
  1841.     move.w    #1,d2            ;maximale color check
  1842.     lsl.w    #rot_dpt,d2
  1843.     sub.w    #1,d2
  1844.     cmp.w    d2,d1
  1845.     ble.s    rotpalcop.a
  1846.     move.w    d2,d1
  1847. rotpalcop.a                ;vector palette copieren
  1848.     lea    vec_pal(a1),a2
  1849.     move.l    rotchp-rot(a6),a3
  1850.     add.l    #rotpal1-rotc,a3
  1851.     add.l    real-rot(a6),a3        ;get current workbuffer
  1852. rotpalcop.bx
  1853.     ifd    ocs
  1854.     move.w    (a2)+,(a3)+
  1855.     endc
  1856.     ifnd    ocs
  1857.     move.l    (a2)+,(a3)+
  1858.     endc
  1859.     dbra    d1,rotpalcop.bx
  1860.     endc
  1861.  
  1862. rot.novec
  1863.     tst.l    curvec-rot(a6)        ;vector aanwezig ?
  1864.     beq    rot.end
  1865.     move.l    curvec-rot(a6),a1
  1866.     cmp.l    #'VECT',(a1)        ;file nog actueel ?
  1867.     bne    rot.end
  1868.         
  1869.     clr.l    d1            ;info ombouwen
  1870.     move.l    d0,d1
  1871.     divs    #8192,d1
  1872.     and.l    #$ffff,d1
  1873.     tst.b    d1
  1874.     beq.s    rot.norotclr
  1875.     clr.w    XROT-rot(a6)        ;xyz clear
  1876.     clr.w    YROT-rot(a6)
  1877.     clr.w    ZROT-rot(a6)
  1878. rot.norotclr
  1879.     muls    #8192,d1
  1880.     sub.l    d1,d0
  1881.  
  1882.     move.l    d0,d1
  1883.     divs    #4096,d1
  1884.     and.l    #$ffff,d1
  1885.     move.b    d1,clrmod-rot(a6)    ;clear on/off
  1886.     muls    #4096,d1
  1887.     sub.l    d1,d0
  1888.  
  1889.     move.l    d0,d1
  1890.     divs    #2048,d1
  1891.     and.l    #$ffff,d1
  1892.     move.b    d1,bufmod-rot(a6)    ;double buffer on/off
  1893.     muls    #2048,d1
  1894.     sub.l    d1,d0
  1895.  
  1896.     move.l    d0,d1
  1897.     divs    #128,d1
  1898.     and.l    #$ffff,d1
  1899.     move.l    d1,d7
  1900.     add.l    #1,d7
  1901.     muls    #2,d7            ;d7 snelheid (add)
  1902.     muls    #128,d1
  1903.     sub.l    d1,d0
  1904.  
  1905.     move.w    d0,d1
  1906.     divs    #64,d1
  1907.     and.l    #$ffff,d1
  1908.     move.w    d1,d3            ;d3 richting (d mov)
  1909.     muls    #64,d1
  1910.     sub.w    d1,d0
  1911.  
  1912.     move.w    d0,d1
  1913.     divs    #8,d1
  1914.     and.l    #$ffff,d1
  1915.     move.w    d1,d2            ;d2 type line/pix/ball
  1916.     muls    #8,d1
  1917.     sub.w    d1,d0
  1918.  
  1919.     move.w    d0,d1
  1920.     divs    #4,d1
  1921.     and.l    #$ffff,d1
  1922.     move.w    d1,d6            ;d6 x rot
  1923.     muls    #4,d1
  1924.     sub.w    d1,d0
  1925.  
  1926.     move.w    d0,d1
  1927.     divs    #2,d1
  1928.     and.l    #$ffff,d1
  1929.     move.w    d1,d5            ;d5 y rot
  1930.     muls    #2,d1
  1931.     sub.w    d1,d0
  1932.  
  1933.     move.w    d0,d4            ;d4 z rot
  1934.  
  1935.     muls    d7,d6
  1936.     muls    d7,d5
  1937.     muls    d7,d4
  1938.     
  1939.     move.w    d6,xadd-rot(a6)
  1940.     move.w    d5,yadd-rot(a6)
  1941.     move.w    d4,zadd-rot(a6)
  1942.     move.w    d3,dway-rot(a6)
  1943.     move.w    d7,dadd-rot(a6)
  1944.  
  1945.     tst.b    clrmod-rot(a6)        ;clear off ?
  1946.     bne.s    rot.noclear
  1947.  
  1948.     movem.l    d0-d7/a0-a6,-(sp)    ;clear screen
  1949.     
  1950.     move.l    rotchp-rot(a6),a3
  1951.     add.l    #rotpln1-rotc,a3        ;plane + centreren
  1952.     add.l    #((rot_hgt-bck_hgt)/2*rot_wid*rot_dpt)+((rot_wid-bck_wid)/4*2),a3
  1953.     add.l    real-rot(a6),a3
  1954.  
  1955.     move.w    #0,$042(a5)
  1956.     move.w    #$100+$f0,$040(a5)
  1957.  
  1958.     move.w    #rot_wid-bck_wid,$064(a5)
  1959.     move.w    #rot_wid-bck_wid,$066(a5)
  1960.  
  1961.     move.w    #0,$074(a5)        ;a dat
  1962.     move.l    #0,$044(a5)        ;mask
  1963.  
  1964.     move.w    #rot_blit-1,d0
  1965. rot.blit1
  1966.     move.l    a3,$054(a5)        ;destination
  1967.     move.w    #((bck_hgt/rot_blit)*rot_dpt)*64+(bck_wid/2),$058(a5)
  1968.     bsr    rot.wblit
  1969.  
  1970.     add.l    #(bck_hgt/rot_blit)*rot_dpt*rot_wid,a3
  1971.  
  1972.     dbra    d0,rot.blit1
  1973.     movem.l    (sp)+,d0-d7/a0-a6
  1974.  
  1975. rot.noclear
  1976.     tst.b    d2
  1977.     bne.s    rot.typa
  1978.     bsr    VECTOR            ;calc coords
  1979.     bsr    rot.pxl            ;pixel
  1980.     bra.s    rot.typend
  1981.  
  1982. rot.typa
  1983.     cmp.b    #1,d2
  1984.     bne.s    rot.typb
  1985.     bsr    VECTOR            ;calc coords
  1986.     bsr    rotlin            ;lijnen
  1987.     bra.s    rot.typend
  1988. rot.typb
  1989.  
  1990.     cmp.b    #2,d2
  1991.     bne.s    rot.typc
  1992.     bsr    VECTOR            ;calc coords
  1993.     bsr    rotgls            ;glas
  1994.     bra.s    rot.typend
  1995. rot.typc
  1996.     cmp.b    #3,d2
  1997.     bne.s    rot.typd
  1998.     bsr    VECTOR            ;calc coords
  1999.     bsr    rotfil            ;solide
  2000.     bra.s    rot.typend
  2001. rot.typd
  2002.     cmp.b    #4,d2
  2003.     bne.s    rot.type
  2004.     bsr    VECTOR            ;calc coords
  2005.     bsr    rot.bal            ;ballen
  2006.     bra.s    rot.typend
  2007. rot.type
  2008.     cmp.b    #5,d2
  2009.     bne.s    rot.typf
  2010.     bsr    VECTOR            ;calc coords
  2011.     bsr    rotsym            ;symetrisch solide
  2012.     bra    rot.typend
  2013. rot.typf
  2014.  
  2015. rot.typend
  2016.     
  2017.     move.w    xadd-rot(a6),d0
  2018.     move.w    yadd-rot(a6),d1
  2019.     move.w    zadd-rot(a6),d2
  2020.  
  2021.     move.w    dadd-rot(a6),d3
  2022.     move.w    dway-rot(a6),d4
  2023.     
  2024.     add.w    d0,XROT-rot(a6)        ;hoek draaing
  2025.     add.w    d1,YROT-rot(a6)
  2026.     add.w    d2,ZROT-rot(a6)
  2027.  
  2028.     btst    #0,d4
  2029.     bne.s    rot.px
  2030.     add.w    d3,DROT-rot(a6)
  2031.     bra.s    rot.q
  2032. rot.px
  2033.     sub.w    d3,DROT-rot(a6)
  2034. rot.q
  2035.     cmp.w    #718,XROT-rot(a6)    ;vergelijkingen
  2036.     ble.s    NOP1
  2037.     sub.w    #718,XROT-rot(a6)
  2038.     
  2039. NOP1:    cmp.w    #718,YROT-rot(a6)
  2040.     ble.s    NOP2
  2041.     sub.w    #718,YROT-rot(a6)
  2042. NOP2:
  2043.     cmp.w    #718,ZROT-rot(a6)
  2044.     ble.s    NOP3
  2045.     sub.w    #718,ZROT-rot(a6)
  2046. NOP3:
  2047.     cmp.w    #rot_drot,DROT-rot(a6)
  2048.     ble.s    NOP4
  2049.     move.w    #rot_drot,DROT-rot(a6)
  2050. NOP4
  2051.     cmp.w    #0,DROT-rot(a6)
  2052.     bge.s    NOP5
  2053.     move.w    #0,DROT-rot(a6)
  2054. NOP5
  2055.  
  2056.  
  2057. GETMEOUT:
  2058.  
  2059. rot.end
  2060.     clr.l    d1
  2061.  
  2062.     ifd    shade
  2063.     move.l    rotchp-rot(a6),a1
  2064.     add.l    #rotcop-rotc,a1
  2065.     move.l    a1,d1            ;copperlist
  2066.     move.l    rotchp-rot(a6),a2
  2067.     add.l    #rotpic1-rotc,a2        ;raw rotplanes
  2068.     move.l    real-rot(a6),d2
  2069.     move.w    #4-1,d4
  2070. rotend.kb
  2071.     sub.l    #rotpic_l,d2
  2072.     cmp.l    #0-rotpic_l,d2
  2073.     bne    rotend.ka
  2074.     move.l    #5*rotpic_l,d2
  2075. rotend.ka
  2076.     move.l    a2,d3
  2077.     add.l    d2,d3
  2078.  
  2079.     move.l    #((rot_hgt-vew_hgt)/2*rot_wid*rot_dpt)+((rot_wid-vew_wid)/2)+rotinf_l,d6
  2080.     cmp.b    #50,var_ntsc(a0)
  2081.     beq    rotend.pal
  2082.     move.l    #((rot_hgt-(vew_hgt-56))/2*rot_wid*rot_dpt)+((rot_wid-vew_wid)/2)+rotinf_l,d6
  2083. rotend.pal
  2084.     add.l    d6,d3
  2085.     move.w    d3,$e(a1)
  2086.     swap    d3
  2087.     move.w    d3,$a(a1)
  2088.     add.l    #8,a1
  2089.     dbra    d4,rotend.kb    
  2090.     endc
  2091.  
  2092.     move.l    rotchp-rot(a6),a0
  2093.     add.l    #rotpic1-rotc,a0        ;raw rotplanes
  2094.     move.l    real-rot(a6),d0        ;get scherm 2
  2095.  
  2096.     tst.b    bufmod-rot(a6)        ;buffer on/off
  2097.     bne.s    rot.end2
  2098.  
  2099.     ifnd    shade
  2100.     eor.l    #rotpic_l,real-rot(a6)    ;real=scherm 2
  2101.     endc
  2102.  
  2103.     ifd    shade
  2104.     move.l    real-rot(a6),d2
  2105.     add.l    #rotpic_l,d2
  2106.     cmp.l    #6*rotpic_l,d2
  2107.     bne    rotend.k
  2108.     clr.l    d2
  2109. rotend.k
  2110.     move.l    d2,real-rot(a6)
  2111.     endc
  2112.  
  2113. rot.end2
  2114.     add.l    d0,a0        
  2115.     movem.l    (sp)+,d2-d7/a1-a6
  2116.     rts
  2117.  
  2118. rot.wblit
  2119.     btst     #6,$002(a5)
  2120.     bne     rot.wblit
  2121.     rts
  2122.     
  2123. rot.bal
  2124.     movem.l    d0-d7/a0-a6,-(sp)
  2125.  
  2126.     move.w    #%1111111111111111,$044(a5)
  2127.     move.w    #%1111111111111111,$046(a5)
  2128.  
  2129.     move.l    rotbaltab-rot(a6),a1
  2130.     cmp.l    rotpal-rot(a6),a1    ;nieuwe bal ?
  2131.     beq.s    rot.bala
  2132.     move.l    a1,rotpal-rot(a6)    ;en opslaan
  2133.  
  2134.     ifnd    shade
  2135.     cmp.w    #rot_dpt,pic_dpt(a1)    ;depth hetzelfde ?
  2136.     bne.s    rot.bala
  2137.     
  2138.     move.w    pic_palnum(a1),d0
  2139.     lea    pic_pal(a1),a1
  2140.     move.l    rotchp-rot(a6),a2
  2141.     add.l    #rotpal1-rotc,a2
  2142.     add.l    real-rot(a6),a2
  2143. rot.balpal
  2144.     ifd    ocs
  2145.     move.w    (a1)+,(a2)+
  2146.     endc
  2147.     ifnd    ocs
  2148.     move.l    (a1)+,(a2)+
  2149.     endc
  2150.     dbra    d0,rot.balpal
  2151.     endc
  2152.     
  2153. rot.bala
  2154.  
  2155.     clr.l    d0
  2156.     clr.l    d1
  2157.     clr.l    d2
  2158.     clr.l    d3
  2159.     clr.l    d4
  2160. rot.balb
  2161.     move.l    curvec-rot(a6),a4
  2162.     add.l    #vec_xyz,a4        ;info overslaan
  2163.         
  2164.     lea    xy,a2
  2165.     move.l    #$7fff,d5
  2166.     move.w    (a4)+,d7        ;aantal xyZ's-1 vanwege DBF_commando
  2167. rot.zaadbal
  2168.     move.w    4(a2),d3        ;z
  2169.     beq.s    rot.zaadbala        ;0 ?
  2170.     
  2171.     cmp.w    d5,d3            ;groter ?
  2172.     bgt.s    rot.zaadbala
  2173.     move.w    d3,d5            ;kleinste z bewaren
  2174.     move.l    a2,a3            ;xyz posiite bewaren
  2175.     move.l    a4,a1            ;kleur positie bewaren    
  2176. rot.zaadbala
  2177.     lea    6(a2),a2
  2178.     lea    8(a4),a4
  2179.     dbra    d7,rot.zaadbal
  2180.  
  2181.     cmp.w    #$7fff,d5        ;klaar ?
  2182.     beq.s    rot.balend
  2183.  
  2184.     moveq.l    #0,d4
  2185.     move.w    6(a1),d4        ;kleur
  2186.     add.w    d4,d4
  2187.     add.w    d4,d4            ;*4
  2188.     movem.w    (a3),d0/d1/d3        ;x,y,z
  2189.     bsr.s    rotobj            ;a0,d0,d1,d4
  2190.     clr.w    4(a3)            ;z wissen
  2191.     bra    rot.balb
  2192.  
  2193. rot.balend
  2194.     movem.l    (sp)+,d0-d7/a0-a6
  2195.     rts
  2196.  
  2197. rotobj                    ;d3
  2198.     movem.l    d0-d7/a0-a6,-(sp)
  2199.  
  2200.     lea    rotbaltab,a0
  2201.     add.l    d4,a0
  2202.         
  2203.     tst.l    (a0)            ;ball file ?
  2204.     beq    rotobj.end
  2205.     move.l    (a0),a0
  2206.     cmp.l    #'OBJE',(a0)        ;nog levend ?
  2207.     bne    rotobj.end
  2208.     cmp.w    #rot_dpt,pic_dpt(a0)    ;depth hetzelfde ?
  2209.     bne    rotobj.end
  2210.     
  2211.     move.l    real-rot(a6),d6        ;get scherm 2
  2212.     move.l    rotchp-rot(a6),a1
  2213.     add.l    #rotpln1-rotc,a1
  2214.     add.l    d6,a1
  2215.     
  2216.     clr.l    d2            ;centreer x
  2217.     move.w    pic_wid(a0),d2
  2218.     sub.l    #2,d2            ;-blitterscrollruimte
  2219.     lsl.l    #2,d2            ;*8/2
  2220.     sub.l    d2,d0
  2221.  
  2222.     clr.l    d2            ;centreer y
  2223.     move.w    pic_hgt(a0),d2
  2224.     lsr.l    #1,d2            ;/2
  2225.     sub.l    d2,d1
  2226.  
  2227.     move.l    d0,d2
  2228.     lsr.l    #4,d0            ;ruwe xpos
  2229.     lsl.l    #1,d0
  2230.     add.l    d0,a1
  2231.  
  2232.     muls    #rot_wid*rot_dpt,d1    ;ypos
  2233.     add.l    d1,a1
  2234.  
  2235.     clr.l    d6
  2236.     move.w    pic_wid(a0),d6        ;bltsize berekenen
  2237.     lsr.w    #1,d6            ;/2
  2238.     clr.l    d5
  2239.     move.w    pic_hgt(a0),d5
  2240.     muls    pic_dpt(a0),d5
  2241.     lsl.w    #6,d5            ;*64 voor bltsize
  2242.     add.w    d5,d6
  2243.     
  2244.     lsl.l    #3,d0            ;bitscroll verder bereken
  2245.     sub.l    d0,d2
  2246.     lsl.w    #8,d2
  2247.     lsl.w    #4,d2
  2248.     move.w    d2,$42(a5)        ;bltcon1
  2249.     add.w    #$0fca,d2
  2250.     move.w    d2,$40(a5)        ;bltcon0
  2251.  
  2252. rotobj.da
  2253.     clr.l    d5
  2254.     move.w    pic_ani(a0),d5        ;aantal brushes
  2255.  
  2256.     move.l    #256,d4            ;maximale z !
  2257.  
  2258.     divs    d5,d4
  2259.     and.l    #$ffff,d4
  2260.     and.l    #$ffff,d3
  2261.     divs    d4,d3
  2262.     and.l    #$ffff,d3
  2263.     
  2264.     clr.l    d5
  2265.     move.w    pic_wid(a0),d5        ;breedte
  2266.     muls    pic_hgt(a0),d5        ;hoogte
  2267.     muls    pic_dpt(a0),d5        ;plnnumes
  2268.  
  2269.     move.l    d5,d7
  2270.     add.l    d5,d5            ;plus mask
  2271.     muls    d3,d5            ;anipos
  2272.  
  2273.     lea    pic_raw(a0),a4        ;obj picture
  2274.     add.l    d5,a4
  2275.     move.l    a4,a3
  2276.     add.l    d7,a3            ;obj mask
  2277.  
  2278.     move.l    #rot_wid,d7
  2279.     sub.w    pic_wid(a0),d7
  2280.     move.w    d7,$60(a5)        ;bltcmod
  2281.     move.w    d7,$66(a5)        ;bltdmod
  2282.  
  2283.     move.w    #0,$62(a5)        ;bltbmod
  2284.     move.w    #0,$64(a5)        ;bltamod
  2285.  
  2286.     clr.l    d3
  2287.     move.w    pic_dpt(a0),d3        ;bck opslaan
  2288.  
  2289. rotobj.a
  2290.     move.l    a1,$48(a5)        ;bltcpt destination
  2291.     move.l    a4,$4c(a5)        ;bltbpt picture
  2292.     move.l    a3,$50(a5)        ;bltapt mask
  2293.     move.l    a1,$54(a5)        ;bltdpt destination
  2294.  
  2295.     move.w    d6,$58(a5)        ;bltsize
  2296.     bsr    rot.wblit
  2297.  
  2298. rotobj.bx
  2299. rotobj.end
  2300.     movem.l    (sp)+,d0-d7/a0-a6
  2301.     rts
  2302.  
  2303. rot.pxl                    ;pixels zetten
  2304.     movem.l    d0-d7/a0-a6,-(sp)
  2305.     clr.l    d0
  2306.     clr.l    d1
  2307.     clr.l    d3
  2308.     clr.l    d4
  2309.  
  2310.     lea    xy,a2
  2311.     
  2312.     move.l    #rot_wid,d6
  2313.     move.l    #rot_wid*rot_dpt,d5    ;y
  2314.     move.l     #7,d4            ;x bit 8
  2315.     
  2316.     move.l    curvec-rot(a6),a1
  2317.     add.l    #vec_xyz,a1
  2318.     move.w    (a1)+,d7        ;aantal xyZ's-1 vanwege DBF_commando
  2319.  
  2320.     move.l    rotchp-rot(a6),a0
  2321.     add.l    #rotpln1-rotc,a0
  2322.     add.l    real-rot(a6),a0        ;get scherm 2
  2323.     add.l    #(rot_dpt-1)*rot_wid,a0
  2324.     move.l    a0,a3
  2325. rot.pxla
  2326.  
  2327.     ifeq    1-rot_dpt
  2328.     movem.w    (a2)+,d0-d1/d3        ;xyz
  2329.  
  2330. ;    muls    d5,d1            ;y
  2331.  
  2332.     ifeq    rot_wid-(384/8*2)    ;*96
  2333.     lsl.w    #5,d1            ;*32
  2334.     move.w    d1,d3
  2335.     add.w    d1,d1            ;*2
  2336.     add.w    d3,d1
  2337.     endc
  2338.  
  2339.     ifeq    rot_wid-(384/8)        ;*48
  2340.     lsl.w    #4,d1            ;*16
  2341.     move.w    d1,d3
  2342.     add.w    d1,d1            ;*2
  2343.     add.w    d3,d1
  2344.     endc
  2345.  
  2346.     move.w    d0,d2
  2347.     lsr.w    #3,d2            ;/8
  2348.     add.w    d2,d1
  2349.     move.w    d4,d2
  2350.     and.w     d4,d0            ;x bit 8
  2351.     sub.w    d0,d2
  2352.  
  2353.     move.l    a3,a0
  2354.     add.l    d1,a0
  2355.     bset    d2,(a0)
  2356.     dbra    d7,rot.pxla
  2357.     endc
  2358.     
  2359.     iflt    1-rot_dpt
  2360.  
  2361.     movem.w    (a2)+,d0-d1/d3        ;xyz
  2362.     move.w    6(a1),d3        ;kleur
  2363.     add.l    #8,a1
  2364.     muls    d5,d1            ;y
  2365.     move.w    d0,d2
  2366.     lsr.w    #3,d2            ;/8
  2367.     add.w    d2,d1
  2368.     move.w    d4,d2
  2369.     and.w     d4,d0            ;x bit 8
  2370.     sub.w    d0,d2
  2371.  
  2372.     move.l    a3,a0
  2373.     add.l    d1,a0
  2374.     move.w    #rot_dpt-1,d0
  2375. rot.pxlb
  2376.     btst    d0,d3
  2377.     beq    rot.pxlc
  2378.     bset    d2,(a0)
  2379. rot.pxlc
  2380.     sub.l    d6,a0
  2381.     dbra    d0,rot.pxlb
  2382.     dbra    d7,rot.pxla
  2383.  
  2384. rot.pxlx
  2385.     endc
  2386.     movem.l    (sp)+,d0-d7/a0-a6
  2387.     rts
  2388.  
  2389. ;DRAWLINE-ROUTINE
  2390. ;d0 = x1
  2391. ;d1 = y1
  2392. ;d2 = x2
  2393. ;d3 = y2
  2394. ;uses d0-d6
  2395.  
  2396. rotlin                    ;lijntjes trekken, joepie !
  2397.     movem.l    d0-d7/a0-a6,-(sp)
  2398.  
  2399.     move.l    curvec-rot(a6),a1
  2400.     add.l    4(a1),a1
  2401.     add.l    #vec_xyz,a1        ;info overslaan
  2402.  
  2403.     lea    xy,a2
  2404.     clr.l    d4
  2405.     move.w    (a1)+,d6        ;aantal poly's
  2406.     cmp.w    #-1,d6            ;geen ?
  2407.     beq.s    rotlin.end
  2408. rotlin.a
  2409.     move.w    (a1)+,d7        ;aantal lijnen
  2410.     lea    2(a1),a1        ;kleur overslaan
  2411. rotlin.bx
  2412.     move.w    (a1)+,d4
  2413.     subq.w    #1,d4
  2414.     muls    #6,d4
  2415.     movem.w    (a2,d4.w),d0-d1
  2416.  
  2417.     move.w    (a1)+,d4
  2418.     subq.w    #1,d4
  2419.     muls    #6,d4
  2420.     movem.w    (a2,d4.w),d2-d3
  2421.  
  2422.     bsr     DRAWLINE        ;lijn tekenen
  2423.     dbra    d7,rotlin.bx
  2424. ;    lea    2(a1),a1
  2425.     dbra    d6,rotlin.a
  2426. rotlin.end
  2427.     movem.l    (sp)+,d0-d7/a0-a6
  2428.     rts
  2429.     
  2430. rotfil                    ;solid poly's
  2431.     movem.l    d0-d7/a0-a6,-(sp)
  2432.  
  2433.     bsr    line_init1        ;eventueel tabel vullen
  2434.     lea    xy,a2
  2435.     bsr    rotsor            ;poly's sorteren
  2436.  
  2437.     cmp.w    #-1,d1            ;geen ?
  2438.     beq    rotfil.end
  2439.  
  2440.     move.w    d1,d3            ;aantal polies
  2441.     move.w    d1,d4            ;aantal polies
  2442.  
  2443. rotfil.fa
  2444.     lea    rotdontab,a4        ;done tabel
  2445.     sub.l    a1,a1
  2446.     move.w    #$7fff,d6        ;maximale z positie
  2447.     move.w    d3,d2            ;aantal poly's
  2448. rotfil.ca
  2449.     move.w    4(a4),d0        ;poly z
  2450.     beq.s    rotfil.aa        ;leeg ?
  2451.     cmp.w    d6,d0            ;z positie groter ?
  2452.     bge.s    rotfil.aa
  2453.     move.l    a4,a1
  2454.     move.w    d0,d6
  2455. rotfil.aa
  2456.     lea    6(a4),a4
  2457.     dbra    d2,rotfil.ca
  2458.  
  2459.     cmp.l    #0,a1
  2460.     beq    rotfil.end        ;voortijdige ejaculatie
  2461.     clr.w    4(a1)            ;poly wissen
  2462.  
  2463.     movem.l    d0-d7/a0-a6,-(sp)
  2464.     move.l    (a1),a1            ;poly halen
  2465.     move.w    (a1)+,d7        ;aantal lijnen
  2466.     move.w    (a1)+,a0        ;kleur
  2467.  
  2468.     moveq.l    #0,d0
  2469.     moveq.l    #0,d1
  2470.     moveq.l    #0,d2
  2471.     moveq.l    #0,d3
  2472.     move.l    #$7fff,d4        ;minimale x
  2473.     move.l    #$7fff,d5        ;minimale y
  2474.     sub.l    a3,a3            ;maximale x
  2475.     sub.l    a4,a4            ;maximale y
  2476. rotfil.bx
  2477.     move.w    (a1)+,d2
  2478.     subq.w    #1,d2
  2479.     muls    #6,d2
  2480.     movem.w    (a2,d2.w),d0-d1        ;x1,y1
  2481.     move.w    (a1)+,d2
  2482.     subq.w    #1,d2
  2483.     muls    #6,d2
  2484.     movem.w    (a2,d2.w),d2-d3        ;x2,y2
  2485.  
  2486.     bsr    line            ;lijn tekenen
  2487.  
  2488.     cmp.w    d4,d0            ;minimale x halen
  2489.     bge.s    rotfil.ba
  2490.     move.w    d0,d4
  2491. rotfil.ba
  2492.     cmp.w    d4,d2
  2493.     bge.s    rotfil.bb
  2494.     move.w    d2,d4
  2495. rotfil.bb
  2496.     cmp.w    d5,d1            ;minimale y halen
  2497.     bge.s    rotfil.bc
  2498.     move.w    d1,d5
  2499. rotfil.bc
  2500.     cmp.w    d5,d3
  2501.     bge.s    rotfil.bd
  2502.     move.w    d3,d5
  2503. rotfil.bd
  2504.  
  2505.     move.l    a3,d6
  2506.     cmp.w    d6,d0            ;maximale x halen
  2507.     ble.s    rotfil.be
  2508.     move.w    d0,a3
  2509. rotfil.be
  2510.     cmp.w    d6,d2
  2511.     ble.s    rotfil.bf
  2512.     move.w    d2,a3
  2513. rotfil.bf
  2514.  
  2515.     move.l    a4,d6
  2516.     cmp.w    d6,d1            ;maximale y halen
  2517.     ble.s    rotfil.bg
  2518.     move.w    d1,a4
  2519. rotfil.bg
  2520.     cmp.w    d6,d3
  2521.     ble.s    rotfil.bh
  2522.     move.w    d3,a4
  2523. rotfil.bh
  2524.  
  2525.     dbra    d7,rotfil.bx
  2526.  
  2527.     bsr    rotpolfil
  2528.  
  2529. rotfil.noline
  2530.     movem.l    (sp)+,d0-d7/a0-a6
  2531.  
  2532. rotfil.ea
  2533.     dbra    d4,rotfil.fa
  2534.  
  2535. rotfil.end
  2536.     movem.l    (sp)+,d0-d7/a0-a6
  2537.     rts
  2538.     
  2539. rotsym                    ;solid lines
  2540.     movem.l    d0-d7/a0-a6,-(sp)
  2541.  
  2542.     bsr    line_init1        ;eventueel tabel vullen
  2543.     lea    xy,a2
  2544.     bsr    rotsor            ;poly's sorteren d1=aantal
  2545.  
  2546.     cmp.w    #-1,d1            ;geen ?
  2547.     beq    rotsym.end
  2548.  
  2549.     move.w    d1,d3            ;aantal polies
  2550.     add.w    #2,d1
  2551.     lsr.w    #1,d1            ;/2
  2552.     sub.w    #1,d1
  2553.  
  2554.     tst.w    d1
  2555.     beq.s    rotsym.plot        ;maar 1 poly !
  2556.     
  2557.     move.w    d1,d4            ;aantal te wissen polies
  2558. rotsym.f
  2559.     lea    rotdontab,a4        ;done tabel
  2560.     move.w    #$7fff,d6        ;maximale z positie
  2561.     move.w    d3,d2            ;aantal poly's
  2562. rotsym.c
  2563.     move.w    4(a4),d0        ;poly z
  2564.     beq.s    rotsym.a        ;leeg ?
  2565.     cmp.w    d6,d0            ;z positie groter ?
  2566.     bgt.s    rotsym.a
  2567.     move.l    a4,a1
  2568.     move.w    d0,d6
  2569. rotsym.a
  2570.     lea    6(a4),a4
  2571.     dbra    d2,rotsym.c
  2572.     clr.w    4(a1)            ;poly wissen
  2573. rotsym.e
  2574.     dbra    d4,rotsym.f
  2575.     
  2576. rotsym.plot
  2577.     move.w    d3,d4            ;aantal polies
  2578.     sub.w    d1,d4            ;- aantal te wissen polies
  2579. rotsym.fa
  2580.     lea    rotdontab,a4        ;done tabel
  2581.     sub.l    a1,a1
  2582.     move.w    #$7fff,d6        ;maximale z positie
  2583.     move.w    d3,d2            ;aantal poly's
  2584. rotsym.ca
  2585.     move.w    4(a4),d0        ;poly z
  2586.     beq.s    rotsym.aa        ;leeg ?
  2587.     cmp.w    d6,d0            ;z positie groter ?
  2588.     bge.s    rotsym.aa
  2589.     move.l    a4,a1
  2590.     move.w    d0,d6
  2591. rotsym.aa
  2592.     lea    6(a4),a4
  2593.     dbra    d2,rotsym.ca
  2594.  
  2595.     cmp.l    #0,a1
  2596.     beq    rotsym.end        ;voortijdige ejaculatie
  2597.     clr.w    4(a1)            ;poly wissen
  2598.  
  2599.     movem.l    d0-d7/a0-a6,-(sp)
  2600.     move.l    (a1),a1            ;poly halen
  2601.     move.w    (a1)+,d7        ;aantal lijnen
  2602.     move.w    (a1)+,a0        ;kleur
  2603.  
  2604.     moveq.l    #0,d0
  2605.     moveq.l    #0,d1
  2606.     moveq.l    #0,d2
  2607.     moveq.l    #0,d3
  2608.     move.l    #$7fff,d4        ;minimale x
  2609.     move.l    #$7fff,d5        ;minimale y
  2610.     sub.l    a3,a3            ;maximale x
  2611.     sub.l    a4,a4            ;maximale y
  2612. rotsym.bx
  2613.     move.w    (a1)+,d2
  2614.     subq.w    #1,d2
  2615.     muls    #6,d2
  2616.     movem.w    (a2,d2.w),d0-d1    ;x1,y1
  2617.     move.w    (a1)+,d2
  2618.     subq.w    #1,d2
  2619.     muls    #6,d2
  2620.     movem.w    (a2,d2.w),d2-d3    ;x2,y2
  2621.  
  2622.     bsr    line            ;lijn tekenen
  2623.  
  2624.     cmp.w    d4,d0            ;minimale x halen
  2625.     bge.s    rotsym.ba
  2626.     move.w    d0,d4
  2627. rotsym.ba
  2628.     cmp.w    d4,d2
  2629.     bge.s    rotsym.bb
  2630.     move.w    d2,d4
  2631. rotsym.bb
  2632.     cmp.w    d5,d1            ;minimale y halen
  2633.     bge.s    rotsym.bc
  2634.     move.w    d1,d5
  2635. rotsym.bc
  2636.     cmp.w    d5,d3
  2637.     bge.s    rotsym.bd
  2638.     move.w    d3,d5
  2639. rotsym.bd
  2640.  
  2641.     move.l    a3,d6
  2642.     cmp.w    d6,d0            ;maximale x halen
  2643.     ble.s    rotsym.be
  2644.     move.w    d0,a3
  2645. rotsym.be
  2646.     cmp.w    d6,d2
  2647.     ble.s    rotsym.bf
  2648.     move.w    d2,a3
  2649. rotsym.bf
  2650.  
  2651.     move.l    a4,d6
  2652.     cmp.w    d6,d1            ;maximale y halen
  2653.     ble.s    rotsym.bg
  2654.     move.w    d1,a4
  2655. rotsym.bg
  2656.     cmp.w    d6,d3
  2657.     ble.s    rotsym.bh
  2658.     move.w    d3,a4
  2659. rotsym.bh
  2660.  
  2661.     dbra    d7,rotsym.bx
  2662.  
  2663.     bsr    rotpolfil
  2664.  
  2665. rotsym.noline
  2666.     movem.l    (sp)+,d0-d7/a0-a6
  2667.  
  2668. rotsym.ea
  2669.     dbra    d4,rotsym.fa
  2670.  
  2671. rotsym.end
  2672.     movem.l    (sp)+,d0-d7/a0-a6
  2673.     rts
  2674.     
  2675. rotsor                    ;polies sorteren
  2676.     movem.l    d2-d7/a0-a6,-(sp)
  2677.  
  2678.     move.l    curvec-rot(a6),a1
  2679.     add.l    4(a1),a1
  2680.     add.l    #vec_xyz,a1        ;info overslaan
  2681.  
  2682.     lea    rotdontab,a4        ;done tabel wissen
  2683.     moveq.l    #0,d7
  2684.     move.w    (a1)+,d6        ;aantal polies
  2685.     move.w    d6,d1
  2686.  
  2687.     cmp.w    #-1,d1            ;geen ?
  2688.     beq.s    rotsor.end
  2689.  
  2690. rotsor.h
  2691.     move.w    (a1),d7            ;aantal lijnen
  2692.     move.w    d7,d3            ;aantal lijnen
  2693.     add.w    #1,d3
  2694.     
  2695.     move.l    a1,(a4)+        ;poly opslaan
  2696.     lea    4(a1),a1        ;+kleur
  2697.     moveq.l    #0,d0            ;gemiddelde z positie
  2698. ;    moveq.l    #0,d2
  2699.     moveq.l    #0,d4            ;gemiddelde z positie
  2700. rotsor.dx
  2701.     move.w    (a1)+,d2        ;coordinaat nummer
  2702.     subq.w    #1,d2
  2703.     muls    #6,d2
  2704.     move.w    4(a2,d2.w),d4        ;z
  2705.     lea    2(a1),a1        ;2de coordinaat overslaan
  2706. ;    cmp.w    d2,d4
  2707. ;    ble    rotsor.da
  2708. ;    move.w    d4,d2
  2709. ;rotsor.da
  2710.     add.l    d4,d0
  2711.     dbra    d7,rotsor.dx
  2712. ;    add.l    d2,d0            ;+hoogste z-positie
  2713.     divs    d3,d0            ;/aantal lijnen
  2714.     move.w    d0,(a4)+        ;poly gem. z opslaan
  2715.  
  2716. ;    lea    2(a1),a1
  2717.     dbra    d6,rotsor.h
  2718. rotsor.g
  2719. rotsor.end
  2720.     movem.l    (sp)+,d2-d7/a0-a6
  2721.     rts
  2722.  
  2723. rotpolfil                ;d4/d5/a3/a4
  2724.     movem.l    d0-d7/a0-a6,-(sp)
  2725.     move.l    rotchp-rot(a6),a2
  2726.     add.l    #rotpln1-rotc,a2
  2727.     move.l    a2,a1
  2728.     add.l    #rotplnw-rotpln1,a1    ;workplane
  2729.     add.l    real-rot(a6),a2        ;get scherm 2
  2730.  
  2731.     move.w    #rot_wid,d7        ;wordt modulo
  2732.  
  2733.     sub.w    #16,d4            ;ruimte voor min x
  2734.     add.w    #16,a3            ;ruimte voor max x
  2735.  
  2736. ;    sub.w    #2,d5            ;ruimte voor min y
  2737.     add.w    #1,a4            ;ruimte voor max y
  2738.     
  2739.     move.w    a4,d0            ;maximale y
  2740.     sub.w    d5,d0            ;-minimale y
  2741.     move.w    d0,d2            ;y hoogte (in lijnen)
  2742.     lsl.w    #6,d0            ;*64
  2743.  
  2744.     move.w    a3,d1            ;maximale x
  2745.     sub.w    d4,d1            ;-minimale x
  2746.     lsr.w    #4,d1            ;/16
  2747.     move.w    d1,d3            ;x breedte (in words)
  2748.     add.w    d1,d0            ;bltsize
  2749.     
  2750.     muls    #rot_wid,d5        ;minimale y
  2751.     add.l    d5,a1            ;+workplane
  2752.  
  2753.     lsr.l    #1,d5            ;/2 (voor hi-res)
  2754.     muls    #rot_dpt,d5        ;minimale y
  2755.     lsl.l    #1,d5            ;*2
  2756.  
  2757.  
  2758.     add.l    d5,a2            ;+destination scherm
  2759.     lsr.w    #4,d4            ;/16 minimale x
  2760.     lsl.w    #1,d4            ;*2 minimale x
  2761.     add.l    d4,a1            ;+workplane
  2762.     add.l    d4,a2            ;+destination scherm
  2763.     
  2764.     muls    #rot_wid,d2        ;y hoogte
  2765.     lsl.w    #1,d3            ;*2 x breedte
  2766.     sub.w    d3,d7            ;module aftrekken
  2767.     add.l    d3,d2
  2768.     move.l    a1,a3            ;workscherm bewaren
  2769.     add.l    d2,a1            ;reverse fill add
  2770.  
  2771.     move.l    a1,$4c(a5)            ;bltbpt
  2772.     move.l    a1,$54(a5)            ;bltdpt
  2773.     move.w    d7,$62(a5)            ;bltbmod
  2774.     move.w    d7,$66(a5)            ;bltdmod
  2775.     move    #%0000010111001100,$40(a5)    ;bltcon0
  2776.     move    #%0000000000010010,$42(a5)    ;bltcon1
  2777.     move    d0,$58(a5)            ;bltsiz
  2778.     bsr    rot.wblit            ;wait for blit
  2779.  
  2780.     add.l    #2,a3            ;reverse ?
  2781.     add.l    #2,a2            ;reverse ?
  2782.  
  2783.     move.w    #$f00+$ca,$040(a5)    ;bltcon0
  2784.     move.w    #0,$042(a5)        ;bltcon1
  2785.     move.l    #-1,$044(a5)        ;mask
  2786.  
  2787.     move.w    d7,d6
  2788.     add.w    #rot_wid*(rot_dpt-1),d6
  2789.  
  2790.     move.w    d6,$60(a5)        ;bltcmod
  2791.     move.w    d7,$62(a5)        ;bltbmod
  2792.     move.w    d7,$64(a5)        ;bltamod
  2793.     move.w    d6,$66(a5)        ;bltdmod
  2794.  
  2795.     move.w    a0,d6            ;kleur halen
  2796.  
  2797.     move.l    a3,a4            ;empty positie
  2798.     add.l    #rotplne-rotplnw,a4
  2799.  
  2800.     add.l    #rot_wid*(rot_dpt-1),a2
  2801.     move.w    #rot_dpt-1,d1
  2802. rotpolfil.a
  2803.     move.l    a3,d2
  2804.     btst    d1,d6            ;kleurnbit test
  2805.  
  2806. ;    beq    rotpolfil.bx        ;doorschijnend
  2807.  
  2808.     bne.s    rotpolfil.c
  2809.     move.l    a4,d2            ;solid
  2810. rotpolfil.c
  2811.     move.l    a2,$48(a5)        ;bltcpt destination
  2812.     move.l    d2,$4c(a5)        ;bltbpt picture
  2813.     move.l    a3,$50(a5)        ;bltapt mask
  2814.     move.l    a2,$54(a5)        ;bltdpt destination
  2815.     move.w    d0,$58(a5)
  2816.     bsr    rot.wblit        ;work > view
  2817. rotpolfil.bx
  2818.     sub.l    #rot_wid,a2
  2819.     dbra    d1,rotpolfil.a
  2820.  
  2821.     move.w    #0,$074(a5)        ;a dat
  2822.     move.l    #0,$044(a5)        ;mask
  2823.     move.w    #$100+$f0,$040(a5)    ;bltcon0
  2824.     move.w    d7,$66(a5)        ;bltdmod
  2825.  
  2826.     move.l    a3,$054(a5)        ;destination
  2827.     move.w    d0,$58(a5)
  2828.     bsr    rot.wblit        ;clr work
  2829.  
  2830.     movem.l    (sp)+,d0-d7/a0-a6
  2831.     rts
  2832.     
  2833.  
  2834.  
  2835. rotgls                    ;solid lines
  2836.     movem.l    d0-d7/a0-a6,-(sp)
  2837.  
  2838.     bsr    line_init1        ;eventueel tabel vullen
  2839.  
  2840.     move.l    curvec-rot(a6),a1
  2841.     add.l    4(a1),a1
  2842.     add.l    #vec_xyz,a1        ;info overslaan
  2843.  
  2844.     move.w    (a1)+,d6        ;aantal polies
  2845.     cmp.w    #-1,d6            ;geen ?
  2846.     beq    rotgls.end
  2847.     
  2848.     lea    xy,a2
  2849. rotgls.a
  2850.     move.w    (a1)+,d7        ;aantal lijnen
  2851.     move.w    (a1)+,a0        ;kleur
  2852.  
  2853.     moveq.l    #0,d0
  2854.     moveq.l    #0,d1
  2855.     moveq.l    #0,d2
  2856.     moveq.l    #0,d3
  2857.     move.l    #$7fff,d4        ;minimale x
  2858.     move.l    #$7fff,d5        ;minimale y
  2859.     sub.l    a3,a3            ;maximale x
  2860.     sub.l    a4,a4            ;maximale y
  2861. rotgls.bx
  2862.     move.w    (a1)+,d2
  2863.     subq.w    #1,d2
  2864.     muls    #6,d2
  2865.     movem.w    (a2,d2.w),d0-d1        ;x1,y1
  2866.     move.w    (a1)+,d2
  2867.     subq.w    #1,d2
  2868.     muls    #6,d2
  2869.     movem.w    (a2,d2.w),d2-d3        ;x2,y2
  2870.  
  2871.     movem.l    d0-d7/a0-a6,-(sp)
  2872.     lea    mt,a0            ;scherm breedte tabel
  2873.  
  2874.     cmp.w    d1,d3            ;y1=y2 ?
  2875.     beq    rotgls.line.end
  2876.     bgt.s    rotgls.nohi
  2877.     exg    d0,d2
  2878.     exg    d1,d3
  2879. rotgls.nohi
  2880.     move    d0,d4
  2881.     move    d1,d5
  2882.  
  2883.     add    d5,d5
  2884.     add    d5,d5            ;*4
  2885.  
  2886.     move.l    rotchp-rot(a6),a1
  2887.     add.l    #rotplnw-rotc,a1
  2888.  
  2889.     add.l    (a0,d5.w),a1        ;y raw
  2890.  
  2891.     lsr    #4,d4            ;*16
  2892.     add    d4,d4            ;*2
  2893.     lea    (a1,d4.w),a1        ;x raw
  2894.  
  2895.     sub.w    d0,d2
  2896.     sub.w    d1,d3
  2897.  
  2898.     moveq    #15,d5
  2899.     and.l    d5,d0
  2900.     move.w    d0,d4
  2901.     ror.l    #4,d0
  2902.     eor.w    d5,d4
  2903.     moveq    #0,d5
  2904.     bset    d4,d5
  2905.     move.w    #4,d0
  2906.     tst.w    d2
  2907.     bpl.s    rotgls.l1
  2908.     addq.w    #1,d0
  2909.     neg.w    d2
  2910. rotgls.l1
  2911.     cmp.w    d2,d3
  2912.     ble.s    rotgls.l2
  2913.     exg    d2,d3
  2914.     subq.w    #4,d0
  2915.     add.w    d0,d0
  2916. rotgls.l2
  2917.     move.w    d3,d4
  2918.     sub.w    d2,d4
  2919.     add.w    d4,d4
  2920.     add.w    d4,d4
  2921.     add.w    d3,d3
  2922.     moveq    #0,d6
  2923.     move.w    d3,d6
  2924.     sub.w    d2,d6
  2925.     bpl.s    rotgls.l3
  2926.     or.w    #16,d0
  2927. rotgls.l3
  2928.     add.w    d3,d3
  2929.     add.w    d0,d0
  2930.     add.w    d0,d0
  2931.     addq.w    #1,d2
  2932.     lsl.w    #6,d2
  2933.     addq.w    #2,d2
  2934.     swap    d3
  2935.     move.w    d4,d3
  2936.     or.l    #$0b5a0003,d0
  2937.  
  2938. rotgls.line.wblit1
  2939.     btst     #6,$002(a5)
  2940.     bne.s     rotgls.line.wblit1
  2941.  
  2942.     move.w    #-1,$72(a5)
  2943.     move.l    #-1,$44(a5)
  2944.     move.w    #rot_wid,$60(a5)
  2945.     move.w    #rot_wid,$66(a5)
  2946.     move.w    #$8000,$74(a5)
  2947.  
  2948.     eor.w    d5,(a1)            ;inverteert onderste punt lijn
  2949.  
  2950.     move.l    d3,$62(a5)        ;bltmod b+a
  2951.     move.w    d6,$52(a5)        ;bltapth
  2952.     move.l    a1,$48(a5)        ;bltcpt
  2953.     move.l    a1,$54(a5)        ;bltdpt
  2954.     move.l    d0,$40(a5)        ;bltcon 0+1
  2955.  
  2956.     move    d2,$58(a5)        ;bltsiz
  2957.  
  2958. rotgls.line.end
  2959.     movem.l    (sp)+,d0-d7/a0-a6
  2960.  
  2961.     cmp.w    d4,d0            ;minimale x halen
  2962.     bge.s    rotgls.ba
  2963.     move.w    d0,d4
  2964. rotgls.ba
  2965.     cmp.w    d4,d2
  2966.     bge.s    rotgls.bb
  2967.     move.w    d2,d4
  2968. rotgls.bb
  2969.     cmp.w    d5,d1            ;minimale y halen
  2970.     bge.s    rotgls.bc
  2971.     move.w    d1,d5
  2972. rotgls.bc
  2973.     cmp.w    d5,d3
  2974.     bge.s    rotgls.bd
  2975.     move.w    d3,d5
  2976. rotgls.bd
  2977.  
  2978.     move.l    d6,-(sp)
  2979.     move.l    a3,d6
  2980.     cmp.w    d6,d0            ;maximale x halen
  2981.     ble.s    rotgls.be
  2982.     move.w    d0,a3
  2983. rotgls.be
  2984.     cmp.w    d6,d2
  2985.     ble.s    rotgls.bf
  2986.     move.w    d2,a3
  2987. rotgls.bf
  2988.  
  2989.     move.l    a4,d6
  2990.     cmp.w    d6,d1            ;maximale y halen
  2991.     ble.s    rotgls.bg
  2992.     move.w    d1,a4
  2993. rotgls.bg
  2994.     cmp.w    d6,d3
  2995.     ble.s    rotgls.bh
  2996.     move.w    d3,a4
  2997. rotgls.bh
  2998.     move.l    (sp)+,d6
  2999.     
  3000.     dbra    d7,rotgls.bx
  3001.  
  3002.     movem.l    d0-d7/a0-a6,-(sp)
  3003.     move.l    rotchp-rot(a6),a2
  3004.     add.l    #rotpln1-rotc,a2
  3005.     move.l    a2,a1
  3006.     add.l    #rotplnw-rotpln1,a1    ;workplane
  3007.     add.l    real-rot(a6),a2        ;get scherm 2
  3008.  
  3009.  
  3010.     move.w    #rot_wid,d7        ;wordt modulo
  3011.  
  3012.     sub.w    #16,d4            ;ruimte voor min x
  3013.     add.w    #16,a3            ;ruimte voor max x
  3014.  
  3015.     add.w    #1,a4            ;ruimte voor max y
  3016.     
  3017.     move.w    a4,d0            ;maximale y
  3018.     sub.w    d5,d0            ;-minimale y
  3019.     move.w    d0,d2            ;y hoogte (in lijnen)
  3020.     lsl.w    #6,d0            ;*64
  3021.  
  3022.     move.w    a3,d1            ;maximale x
  3023.     sub.w    d4,d1            ;-minimale x
  3024.     lsr.w    #4,d1            ;/16
  3025.     move.w    d1,d3            ;x breedte (in words)
  3026.     add.w    d1,d0            ;bltsize
  3027.     
  3028.     muls    #rot_wid,d5        ;minimale y
  3029.     add.l    d5,a1            ;+workplane
  3030.  
  3031.     lsr.l    #1,d5            ;/2 (voor hi-res)
  3032.     muls    #rot_dpt,d5        ;minimale y
  3033.     lsl.l    #1,d5            ;*2
  3034.  
  3035.     add.l    d5,a2            ;+destination scherm
  3036.     lsr.w    #4,d4            ;/16 minimale x
  3037.     lsl.w    #1,d4            ;*2 minimale x
  3038.     add.l    d4,a1            ;+workplane
  3039.     add.l    d4,a2            ;+destination scherm
  3040.     
  3041.     muls    #rot_wid,d2        ;y hoogte
  3042.     lsl.w    #1,d3            ;*2 x breedte
  3043.     sub.w    d3,d7            ;module aftrekken
  3044.     add.l    d3,d2
  3045.     move.l    a1,a3            ;workscherm bewaren
  3046.     add.l    d2,a1            ;reverse fill add
  3047.  
  3048. rotpolgls.wblit1
  3049.     btst     #6,$002(a5)
  3050.     bne.s     rotpolgls.wblit1
  3051.  
  3052.     move.l    a1,$4c(a5)            ;bltbpt
  3053.     move.l    a1,$54(a5)            ;bltdpt
  3054.     move.w    d7,$62(a5)            ;bltbmod
  3055.     move.w    d7,$66(a5)            ;bltdmod
  3056.     move    #%0000010111001100,$40(a5)    ;bltcon0
  3057.     move    #%0000000000010010,$42(a5)    ;bltcon1
  3058.     move    d0,$58(a5)            ;bltsiz
  3059.  
  3060.     add.l    #2,a3            ;reverse ?
  3061.     add.l    #2,a2            ;reverse ?
  3062.  
  3063. rotpolgls.wblit5
  3064.     btst     #6,$002(a5)
  3065.     bne.s     rotpolgls.wblit5
  3066.  
  3067.     move.w    #$f00+$ca,$040(a5)    ;bltcon0
  3068.     move.w    #0,$042(a5)        ;bltcon1
  3069.     move.l    #-1,$044(a5)        ;mask
  3070.  
  3071.     move.w    d7,d6
  3072.     add.w    #rot_wid*(rot_dpt-1),d6
  3073.  
  3074.     move.w    d6,$60(a5)        ;bltcmod
  3075.     move.w    d7,$62(a5)        ;bltbmod
  3076.     move.w    d7,$64(a5)        ;bltamod
  3077.     move.w    d6,$66(a5)        ;bltdmod
  3078.  
  3079.     move.w    a0,d6            ;kleur halen
  3080.  
  3081.     move.l    a3,a4            ;empty positie
  3082.     add.l    #rotplne-rotplnw,a4
  3083.  
  3084.     add.l    #rot_wid*(rot_dpt-1),a2
  3085.     move.w    #rot_dpt-1,d1
  3086. rotpolgls.a
  3087.     move.l    a3,d2
  3088.     btst    d1,d6            ;kleurnbit test
  3089.     beq.s    rotpolgls.bx        ;doorschijnend
  3090.  
  3091. rotpolgls.wblit3
  3092.     btst     #6,$002(a5)
  3093.     bne.s     rotpolgls.wblit3
  3094.  
  3095.     move.l    a2,$48(a5)        ;bltcpt destination
  3096.     move.l    d2,$4c(a5)        ;bltbpt picture
  3097.     move.l    a3,$50(a5)        ;bltapt mask
  3098.     move.l    a2,$54(a5)        ;bltdpt destination
  3099.     move.w    d0,$58(a5)
  3100. rotpolgls.bx
  3101.     sub.l    #rot_wid,a2
  3102.     dbra    d1,rotpolgls.a
  3103.  
  3104. rotpolgls.wblit4
  3105.     btst     #6,$002(a5)
  3106.     bne.s     rotpolgls.wblit4
  3107.  
  3108.     move.w    #0,$074(a5)        ;a dat
  3109.     move.l    #0,$044(a5)        ;mask
  3110.     move.w    #$100+$f0,$040(a5)    ;bltcon0
  3111.     move.w    d7,$66(a5)        ;bltdmod
  3112.     move.l    a3,$054(a5)        ;destination
  3113.     move.w    d0,$58(a5)
  3114.     movem.l    (sp)+,d0-d7/a0-a6
  3115.  
  3116.     dbra    d6,rotgls.a
  3117.  
  3118. rotgls.end
  3119.     bsr    rot.wblit
  3120.     movem.l    (sp)+,d0-d7/a0-a6
  3121.     rts
  3122.     
  3123. rotpolgls                ;d4/d5/a3/a4
  3124.     rts
  3125.     
  3126. line
  3127.     movem.l    d0-d7/a0-a6,-(sp)
  3128.     lea    mt,a0            ;scherm breedte tabel
  3129.  
  3130.     cmp.w    d1,d3            ;y1=y2 ?
  3131.     beq    line.end
  3132.     bgt.s    nohi
  3133.     exg    d0,d2
  3134.     exg    d1,d3
  3135. nohi
  3136.     move    d0,d4
  3137.     move    d1,d5
  3138.  
  3139.     add    d5,d5
  3140.     add    d5,d5            ;*4
  3141.  
  3142.     move.l    rotchp-rot(a6),a1
  3143.     add.l    #rotplnw-rotc,a1
  3144.  
  3145.     add.l    (a0,d5.w),a1        ;y raw
  3146.  
  3147.     lsr    #4,d4            ;*16
  3148.     add    d4,d4            ;*2
  3149.     lea    (a1,d4.w),a1        ;x raw
  3150.  
  3151.     sub.w    d0,d2
  3152.     sub.w    d1,d3
  3153.  
  3154.     moveq    #15,d5
  3155.     and.l    d5,d0
  3156.     move.w    d0,d4
  3157.     ror.l    #4,d0
  3158.     eor.w    d5,d4
  3159.     moveq    #0,d5
  3160.     bset    d4,d5
  3161.     move.w    #4,d0
  3162.     tst.w    d2
  3163.     bpl.s    l1
  3164.     addq.w    #1,d0
  3165.     neg.w    d2
  3166. l1    cmp.w    d2,d3
  3167.     ble.s    l2
  3168.     exg    d2,d3
  3169.     subq.w    #4,d0
  3170.     add.w    d0,d0
  3171. l2    move.w    d3,d4
  3172.     sub.w    d2,d4
  3173.     add.w    d4,d4
  3174.     add.w    d4,d4
  3175.     add.w    d3,d3
  3176.     moveq    #0,d6
  3177.     move.w    d3,d6
  3178.     sub.w    d2,d6
  3179.     bpl.s    l3
  3180.     or.w    #16,d0
  3181. l3    add.w    d3,d3
  3182.     add.w    d0,d0
  3183.     add.w    d0,d0
  3184.     addq.w    #1,d2
  3185.     lsl.w    #6,d2
  3186.     addq.w    #2,d2
  3187.     swap    d3
  3188.     move.w    d4,d3
  3189.     or.l    #$0b5a0003,d0
  3190.  
  3191. ;line.wblit1
  3192. ;    btst     #6,$002(a5)
  3193. ;    bne     line.wblit1
  3194.  
  3195.     move.w    #-1,$72(a5)
  3196.     move.l    #-1,$44(a5)
  3197.     move.w    #rot_wid,$60(a5)
  3198.     move.w    #rot_wid,$66(a5)
  3199.     move.w    #$8000,$74(a5)
  3200.  
  3201.     eor.w    d5,(a1)            ;inverteert onderste punt lijn
  3202.  
  3203.     move.l    d3,$62(a5)        ;bltmod b+a
  3204.     move.w    d6,$52(a5)        ;bltapth
  3205.     move.l    a1,$48(a5)        ;bltcpt
  3206.     move.l    a1,$54(a5)        ;bltdpt
  3207.     move.l    d0,$40(a5)        ;bltcon 0+1
  3208.  
  3209.     move    d2,$58(a5)        ;bltsiz
  3210.     bsr    rot.wblit        ;wait for blit
  3211.  
  3212. line.end
  3213.     movem.l    (sp)+,d0-d7/a0-a6
  3214.     rts
  3215.  
  3216. line_init1                ;scherm breedte tabel
  3217.     movem.l    d0-d7/a0-a6,-(sp)
  3218.     lea    mt,a0            ;vullen
  3219.     tst.l    4(a0)            ;al gevuld ?
  3220.     bne.s    line_init1.end
  3221.  
  3222.     moveq    #0,d1
  3223.     move    #rot_hgt-1,d0
  3224. line_init1.a                ;scherm breedte tabel
  3225.     move.l    d1,(a0)+
  3226.     add.l    #rot_wid,d1
  3227.     dbf    d0,line_init1.a
  3228. line_init1.end
  3229.     movem.l    (sp)+,d0-d7/a0-a6
  3230.     rts
  3231.  
  3232. ;DRAWLINE-ROUTINE
  3233. ;d0 = x1
  3234. ;d1 = y1
  3235. ;d2 = x2
  3236. ;d3 = y2
  3237. ;uses d0-d6
  3238.  
  3239. DRAWLINE:
  3240.     movem.l    d0-d7/a0-a6,-(sp)
  3241.     ifnd    nodraw
  3242.  
  3243.     move.l     #rot_wid*rot_dpt,d4
  3244.     mulu     d1,d4
  3245.     moveq     #-$10,d5
  3246.     and.w     d0,d5
  3247.     lsr.w     #3,d5
  3248.     add.w     d5,d4
  3249.  
  3250.     move.l    rotchp-rot(a6),a0
  3251.     add.l    #rotpln1-rotc,a0
  3252.     add.l    real-rot(a6),a0        ;get scherm 2
  3253.     add.l     a0,d4            ;raw rotplanes
  3254.     
  3255.     moveq.l    #0,d5
  3256.     sub.w     d1,d3
  3257.     roxl.b     #1,d5  
  3258.     tst.w     d3
  3259.     bge.s     Y2GY1
  3260.     neg.w     d3
  3261. Y2GY1:    sub.w     d0,d2
  3262.     roxl.b     #1,d5
  3263.     tst.w     d2
  3264.     bge.s     X2GX1
  3265.     neg.w     d2
  3266. X2GX1:    move.w     d3,d1            ;d3=deltay    d1=d3
  3267.     sub.w     d2,d1            ;d2=deltax    d1=deltay
  3268.     bge.s     DYGDX
  3269.     exg     d2,d3
  3270. DYGDX:    roxl.b     #1,d5
  3271.     move.b     octtabel(pc,d5),d5
  3272.     add.w     d2,d2            ;2*Gdelta
  3273.  
  3274.     move.w     d2,$0062(a5)        ;d2    2*Gdelta
  3275.     sub.w     d3,d2            ;2*Gdelta-Kdelta
  3276.     bge.s     SIGNNL            ;Negative then...
  3277.     or.b     #$40,d5            ;Set bit 6(=64)  van octtant waarde
  3278. SIGNNL:    move.w     d2,$0052(a5)        ;2*Gdelta-Kdelta in BLTAPTL
  3279.     sub.w     d3,d2            ;2*Gdelta-2*Kdelta
  3280.     move.w     d2,$0064(a5)        ;in BLTAMOD
  3281.  
  3282.     move.w     #$8000,$0074(a5)
  3283.     move.w     #$ffff,$0072(a5)
  3284.     move.l     #$ffffffff,$0044(a5)
  3285.     and.w     #$000f,d0
  3286.     ror.w    #4,d0
  3287.     or.w     #$0bca,d0
  3288.     move.w     d0,$0040(a5)
  3289.     move.w     d5,$0042(a5)
  3290.     move.l     d4,$0048(a5)
  3291.     move.l     d4,$0054(a5)
  3292.     move.w     #rot_wid*rot_dpt,$0060(a5)
  3293.     move.w     #rot_wid*rot_dpt,$0066(a5)
  3294.     addq.w    #1,d3
  3295.     lsl.w     #6,d3
  3296.     addq.w     #2,d3
  3297.     move.w     d3,$0058(a5)
  3298.     bsr    rot.wblit
  3299.     endc
  3300.     movem.l    (sp)+,d0-d7/a0-a6
  3301.     rts
  3302.  
  3303. octtabel:
  3304.     dc.b    0*4+1
  3305.     dc.b     4*4+1
  3306.     dc.b    2*4+1
  3307.     dc.b    5*4+1
  3308.     dc.b    1*4+1
  3309.     dc.b    6*4+1
  3310.     dc.b    3*4+1
  3311.     dc.b    7*4+1                
  3312.  
  3313.  
  3314.  
  3315.     ifd mx68882        ;68882 routines by Roger Heykoop !
  3316.  
  3317.  
  3318. VECTOR:                    ;coordinaten bereken
  3319. ;         6666   8888   8888   8888   2222
  3320. ;        6      8    8 8    8 8    8      2
  3321. ;        6      8    8 8    8 8    8      2
  3322. ;        66666   8888   8888   8888   2222   optimized code
  3323. ;        6    6 8    8 8    8 8    8 2
  3324. ;        6    6 8    8 8    8 8    8 2
  3325. ;         6666   8888   8888   8888   2222
  3326.  
  3327.     movem.l    d0-d7/a0-a6,-(sp)
  3328.  
  3329.     LEA    xy,A1            ;resultaten
  3330.  
  3331.     move.l    curvec-rot(a6),a0
  3332.     add.l    #vec_xyz,a0        ;info overslaan
  3333.     ifd    copperspeed
  3334.     move.w    #$f00,$dff180
  3335.     endc
  3336. Vec_jmp:
  3337.     Fmove.w    XROT-rot(a6),Fp6    ;x rotatie in Fp0
  3338.     Fmove.w    YROT-rot(a6),Fp7    ;y rotatie in Fp1
  3339.     Fmove.w    ZROT-rot(a6),Fp2    ;z rotatie in Fp2
  3340.     
  3341.     Fdiv.x    #5.729577951E1,Fp6    ;deelt rotatie door 360/2pi
  3342.     Fdiv.x    #5.729577951E1,Fp7    ;en dus wordt het resultaat
  3343.     Fdiv.x    #5.729577951E1,Fp2    ;tussen on en 2pi  !!!
  3344.  
  3345.     Fsin.x    Fp2,Fp4
  3346.     Fcos.x    Fp2,Fp5
  3347.     Fsin.x    Fp6,Fp0
  3348.     Fcos.x    Fp6,Fp1
  3349.     Fsin.x    Fp7,Fp2
  3350.     Fcos.x    Fp7,Fp3
  3351.  
  3352.     MOVE.W    (a0)+,D7        ;aantal punten
  3353.  
  3354. VECS:
  3355. ;Fp0/Fp1/Fp2 zijn de rotatie angles ax ay en az van 0 tot 2pi
  3356. ;Het resultaat na roteren x' y' en z' is:
  3357. ; X'= X(         cosay * cosaz) - Y(         cosay * sinaz) + Z(sinax)
  3358. ; Y'= X( sinax * sinay * cosaz) + Y(-sinax * sinay * sinaz) + Y(cosax * cosaz) - Z(sinax * sinay)
  3359. ; Z'= X(-cosax * sinay * cosaz) + X( sinax * sinaz) + Y(cosax * sinay * sinaz) + Y(sinax * cosaz) + Z(cosax*cosay)
  3360. ;
  3361. ;Vervang vervolgens:  sin ax  Fp0
  3362. ;                     cos ax  Fp1
  3363. ;                     sin ay  Fp2
  3364. ;                     cos ay  Fp3
  3365. ;                     sin az  Fp4
  3366. ;                     cos az  Fp5
  3367. ;
  3368. ; X'= X(     Fp3*Fp5) -               Y(     Fp3*Fp4)              + Z(Fp0)
  3369. ; Y'= X( Fp0*Fp2*Fp5) +               Y(-Fp0*Fp2*Fp4) + Y(Fp1*Fp5) - Z(Fp0*Fp2)
  3370. ; Z'= X(-Fp1*Fp2*Fp5) + X( Fp0*Fp4) + Y( Fp1*Fp2*Fp4) + Y(Fp0*Fp5) + Z(Fp1*Fp3)
  3371. ;
  3372. ; X'= X*Fp3*Fp5                  - Y*Fp3*Fp4                  + Z*Fp0
  3373. ; Y'= X*Fp0*Fp2*Fp5  +             Y*-Fp0*Fp2*Fp4 + Y*Fp1*Fp5 - Z*Fp0*Fp2
  3374. ; Z'= X*-Fp1*Fp2*Fp5 + X*Fp0*Fp4 + Y*Fp1*Fp2*Fp4  + Y*Fp0*Fp5 + Z*Fp1*Fp3
  3375.  
  3376.  
  3377.         movem.w    (a0)+,d4/d5/d6    ;Haal x,y en z uit geheugen...
  3378.                 ;1 memory access,spaart bergen tijd...
  3379.  
  3380. ;input: d4/d5/d6  x,y,z
  3381.     Fmove.w    d4,Fp6        ;haal x
  3382.     Fmove.x    Fp6,Fp7
  3383.     Fmul.x    Fp3,Fp7
  3384.     Fmul.x    Fp5,Fp7
  3385.     Fmove.l    Fp7,d1        ;x' deel 1...
  3386.     Fmove.x    Fp6,Fp7
  3387.     Fmul.x    Fp0,Fp7
  3388.     Fmul.x    Fp2,Fp7
  3389.     Fmul.x    Fp5,Fp7
  3390.     Fmove.l    Fp7,d2        ;y' deel 1...
  3391.     Fmove.x    Fp6,Fp7
  3392.     Fmul.x    Fp1,Fp7
  3393.     Fmul.x    Fp2,Fp7
  3394.     Fmul.x    Fp5,Fp7
  3395.     Fmove.l    Fp7,d0
  3396.     move.l    d0,d3
  3397.     neg.l    d3        ;z' deel 1a...
  3398.     Fmove.x    Fp6,Fp7
  3399.     Fmul.x    Fp0,Fp7
  3400.     Fmul.x    Fp4,Fp7
  3401.     Fmove.l    Fp7,d0
  3402.     add.l    d0,d3        ;z' deel 1b...
  3403.  
  3404.     Fmove.w    d5,Fp6           ;haal y
  3405.     Fmove.x    Fp6,Fp7
  3406.     Fmul.x    Fp3,Fp7
  3407.     Fmul.x    Fp4,Fp7
  3408.     Fmove.l    Fp7,d0
  3409.     sub.l    d0,d1        ;x' deel 2...
  3410.         Fmove.x    Fp6,Fp7
  3411.     Fmul.x    Fp0,Fp7
  3412.     Fmul.x    Fp2,Fp7
  3413.     Fmul.x    Fp4,Fp7
  3414.     Fmove.l    Fp7,d0
  3415.     sub.l    d0,d2        ;y' deel 2a...
  3416.     Fmove.x    Fp6,Fp7
  3417.     Fmul.x    Fp1,Fp7
  3418.     Fmul.x    Fp5,Fp7
  3419.     Fmove.l    Fp7,d0
  3420.     add.l    d0,d2        ;y' deel 2b...
  3421.     Fmove.x    Fp6,Fp7
  3422.     Fmul.x    Fp1,Fp7
  3423.     Fmul.x    Fp2,Fp7
  3424.     Fmul.x    Fp4,Fp7
  3425.         Fmove.l    Fp7,d0
  3426.     add.l    d0,d3        ;z' deel 2a...
  3427.     Fmove.x    Fp6,Fp7
  3428.     Fmul.x    Fp0,Fp7
  3429.     Fmul.x    Fp5,Fp7
  3430.         Fmove.l    Fp7,d0
  3431.     add.l    d0,d3        ;z' deel 2b...
  3432.  
  3433.     Fmove.w    d6,Fp6        ;haal z
  3434.     Fmove.x    Fp6,Fp7
  3435.     Fmul.x    Fp0,Fp7
  3436.     Fmove.l    Fp7,d0
  3437.     add.l   d0,d1        ;x' deel 3...
  3438.     Fmove.x    Fp6,Fp7
  3439.         Fmul.x    Fp0,Fp7
  3440.     Fmul.x    Fp3,Fp7
  3441.     Fmove.l    Fp7,d0
  3442.     sub.l    d0,d2        ;y' deel 3...
  3443.     Fmove.x    Fp6,Fp7
  3444.     Fmul.x    Fp1,Fp7
  3445.     Fmul.x    Fp3,Fp7
  3446.     Fmove.l    Fp7,d0
  3447.     add.l    d0,d3        ;z' deel 3...
  3448.  
  3449. ;nu: d1/d2/d3 bevat x'y'z'...
  3450.  
  3451.  
  3452.     move.w    d3,d4
  3453.     add.w    ZV-rot(a6),d4        ;z ball
  3454.     sub.w    ZV-rot(a6),D3        ;z centrum
  3455.     move.w    drot-rot(a6),d0        ;grote wereld
  3456.     muls    d0,D1            ;muls !
  3457.     divs    D3,D1            ;divs !
  3458.     add.W    XV-rot(a6),D1        ;x centrum
  3459.     muls    d0,D2            ;muls !
  3460.     divs    D3,D2            ;divs !
  3461.     add.w    YV-rot(a6),D2        ;y centrum
  3462.  
  3463.     muls    d0,D4            ;muls ! z ball
  3464.  
  3465.     ifeq    rot_hgt-384
  3466.     lsr.l    #8,d4            ;/256
  3467.     lsr.l    #3,d4            ;/2
  3468.     move.w    d4,d3
  3469.     lsr.w    #1,d4            ;/2
  3470.     add.w    d3,d4
  3471.     endc
  3472.  
  3473.     ifeq    rot_hgt-(384*2)        ;/6144
  3474.     lsr.l    #8,d4            ;/256
  3475.     lsr.l    #4,d4            ;/4
  3476.     move.w    d4,d3
  3477.     lsr.w    #1,d4            ;/2
  3478.     add.w    d3,d4
  3479.     endc
  3480.  
  3481.      movem.w d1/d2/d4,(a1)
  3482.      add.l    #3*2,a1
  3483.  
  3484. ;    lea    2(a0),a0
  3485.     add.l    #2,a0            ;kleur
  3486.     Dbra    D7,VECS                 ;Ah! A loop...Are the caches
  3487.                     ;on mr. Zulu? Warp factor 9,sir!
  3488.  
  3489.     ifd    copperspeed
  3490.     move.w    #$000,$dff180
  3491.     endc
  3492.     movem.l    (sp)+,d0-d7/a0-a6
  3493.     RTS
  3494.  
  3495.     endc
  3496.     ifnd mx68882
  3497.  
  3498. VECTOR:                    ;coordinaten bereken
  3499.     movem.l    d0-d7/a0-a6,-(sp)
  3500.  
  3501.     LEA    xy,A1
  3502.     LEA    SINCOS+$5a,A2
  3503.  
  3504.     ifd    copperspeed
  3505.     move.w    #$f00,$dff180
  3506.     endc
  3507.  
  3508.     move.l    curvec-rot(a6),a0
  3509.     add.l    #vec_xyz,a0        ;info overslaan
  3510.  
  3511.     MOVE.W    (a0)+,D7        ;aantal punten
  3512.  
  3513. VECS:
  3514.     MOVE.W    (A0)+,D0        ;x
  3515.     MOVE.W    D0,D2            ;
  3516.  
  3517.     MOVE.W    (A0)+,D1        ;y
  3518.     MOVE.W    D1,D3            ;
  3519.     MOVE.W    ZROT-rot(a6),D6        ;
  3520.     MOVE.W    $5a(A2,D6.W),D4        ;
  3521.     MOVE.W    -$5a(A2,D6.W),D5    ;
  3522.     MULS.W    D4,D0            ;
  3523.     MULS.W    D5,D1            ;
  3524.     SUB.L    D1,D0            ;
  3525.     ADD.L    D0,D0            ;
  3526.     SWAP    D0            ;
  3527.     MULS.W    D5,D2            ;muls !
  3528.     MULS.W    D4,D3            ;muls !
  3529.     ADD.L    D3,D2            ;
  3530.     ADD.L    D2,D2
  3531.     SWAP    D2            ;
  3532.     MOVE.W    D2,D4            ;
  3533.  
  3534.     MOVE.W    (A0)+,D1        ;z
  3535.     MOVE.W    D1,D3            ;
  3536.  
  3537.     MOVE.W    XROT-rot(a6),D6        ;x-rot
  3538.     MOVE.W    $5a(A2,D6.W),D5        ;
  3539.     MOVE.W    -$5a(A2,D6.W),D6    ;
  3540.     MULS.W    D5,D2            ;muls !
  3541.     MULS.W    D6,D1            ;muls !
  3542.  
  3543.     SUB.L    D1,D2            ;
  3544.     ADD.L    D2,D2
  3545.     SWAP    D2            ;
  3546.     MULS.W    D5,D3            ;muls !
  3547.     MULS.W    D6,D4            ;muls !
  3548.     ADD.L    D4,D3            ;
  3549.     ADD.L    D3,D3            
  3550.     SWAP    D3            ;
  3551.     MOVE.W    D0,D1            ;
  3552.     MOVE.W    D3,D4            ;
  3553.  
  3554.     MOVE.W    YROT-rot(a6),D6        ;y-rot
  3555.     MOVE.W    $5a(A2,D6.W),D5        ;
  3556.     MOVE.W    -$5a(A2,D6.W),D6    ;
  3557.     MULS.W    D5,D3            ;
  3558.     MULS.W    D6,D0            ;
  3559.     SUB.L    D0,D3            ;
  3560.     ADD.L    D3,D3
  3561.     SWAP    D3            ;
  3562.     MULS.W    D6,D4            ;muls !
  3563.     MULS.W    D5,D1            ;muls !
  3564.     ADD.L    D4,D1            ;
  3565.     ADD.L    D1,D1
  3566.     SWAP    D1            ;d1=x d2=y d3=z  na rotatie
  3567.  
  3568.     move.w    d3,d4
  3569.     add.W    ZV-rot(a6),d4        ;z ball
  3570.  
  3571.     SUB.W    ZV-rot(a6),D3        ;z centrum
  3572.  
  3573.     move.w    DROT-rot(a6),d0        ;grote wereld
  3574.     MULS    d0,D1            ;muls !
  3575.     DIVS    D3,D1            ;divs !
  3576.  
  3577.     ADD.W    XV-rot(a6),D1        ;x centrum
  3578.     MULS    d0,D2            ;muls !
  3579.     DIVS    D3,D2            ;divs !
  3580.  
  3581.     ADD.W    YV-rot(a6),D2        ;y centrum
  3582.  
  3583.     MOVE.W    D1,(A1)+        ;x
  3584.     MOVE.W    D2,(A1)+        ;y
  3585.  
  3586.     MULS    d0,D4            ;muls ! z ball
  3587.  
  3588. ;    divs    #rot_hgt*20,d4        ;divs !
  3589.  
  3590.     ifeq    rot_hgt-384
  3591.     lsr.l    #8,d4            ;/256
  3592.     lsr.l    #3,d4            ;/2
  3593.     move.w    d4,d3    
  3594.     lsr.w    #1,d4            ;/2
  3595.     add.w    d3,d4
  3596.     endc
  3597.  
  3598.     ifeq    rot_hgt-(384*2)        ;/6144
  3599.     lsr.l    #8,d4            ;/256
  3600.     lsr.l    #4,d4            ;/4
  3601.     move.w    d4,d3
  3602.     lsr.w    #1,d4            ;/2
  3603.     add.w    d3,d4
  3604.     endc
  3605.         
  3606.     MOVE.W    d4,(A1)+        ;z
  3607.  
  3608.     lea    2(a0),a0
  3609. ;    add.l    #2,a0            ;kleur
  3610.     Dbra    D7,VECS
  3611.  
  3612.     ifd    copperspeed
  3613.     move.w    #$000,$dff180
  3614.     endc
  3615.  
  3616. vector.end
  3617.     movem.l    (sp)+,d0-d7/a0-a6
  3618.     RTS    
  3619.  
  3620.     endc
  3621.  
  3622. ;rot.baldat    ds.l    64*3*4
  3623.  
  3624.  
  3625. rotchp    dc.l    0
  3626.  
  3627. curvec    dc.l    0
  3628. rotpal    dc.l    0
  3629. real:    dc.l    0
  3630.  
  3631. XROT:    dc.w    0            ;aantal graden te roteren om X-as    
  3632. YROT:    dc.w    0            ;aantal graden om Y-as
  3633. ZROT:    dc.w    0            ;aantal om Z-as
  3634. DROT:    dc.w    0
  3635.  
  3636. XV:    dc.w    (rot_wid+rot_cen)*4;    ;centrum xcoord
  3637. YV:    dc.w    (rot_hgt/2)        ;ycoord
  3638.  
  3639. ZV:    dc.w    780            ;zcoord
  3640.  
  3641. xadd    dc.w    0
  3642. yadd    dc.w    0
  3643. zadd    dc.w    0
  3644. dadd    dc.w    0
  3645. dway    dc.w    0
  3646.  
  3647. bufmod    dc.b    0
  3648. clrmod    dc.b    0
  3649.  
  3650.     cnop    0,2
  3651.     ifnd mx68882
  3652. SINCOS:
  3653.   dc.w     0,571,1143,1714,2285,2855,3425,3993
  3654.   dc.w     4560,5125,5689,6252,6812,7370,7927,8480
  3655.   dc.w     9031,9580,10125,10667,11206,11742,12274,12803
  3656.   dc.w     13327,13847,14364,14875,15383,15885,16383,16876
  3657.   dc.w     17363,17846,18323,18794,19259,19719,20173,20620
  3658.   dc.w     21062,21497,21925,22347,22761,23169,23570,23964
  3659.   dc.w     24350,24729,25100,25464,25820,26168,26509,26841
  3660.   dc.w     27165,27480,27788,28086,28377,28658,28931,29195
  3661.   dc.w     29450,29696,29934,30162,30381,30590,30790,30981
  3662.   dc.w     31163,31335,31497,31650,31793,31927,32050,32164
  3663.   dc.w     32269,32363,32448,32522,32587,32642,32687,32722
  3664.   dc.w     32747,32762,32767,32762,32747,32722,32687,32642
  3665.   dc.w     32587,32522,32448,32363,32269,32164,32050,31927
  3666.   dc.w     31793,31650,31497,31335,31163,30981,30790,30590
  3667.  
  3668.   dc.w     30381,30162,29934,29696,29450,29195,28931,28658
  3669.   dc.w     28377,28086,27787,27480,27165,26841,26509,26168
  3670.   dc.w     25820,25464,25100,24729,24350,23964,23570,23169
  3671.   dc.w     22761,22347,21925,21497,21062,20620,20173,19719
  3672.   dc.w     19259,18794,18323,17846,17363,16876,16383,15885
  3673.   dc.w     15383,14875,14364,13848,13327,12803,12274,11742
  3674.   dc.w     11207,10667,10125,9580,9031,8480,7927,7371
  3675.   dc.w     6812,6252,5690,5126,4560,3993,3425,2855
  3676.   dc.w     2285,1715,1143,572,0
  3677.   dc.w    -571,-1143,-1714
  3678.   dc.w    -2285,-2855,-3424,-3993,-4560,-5125,-5689,-6252
  3679.   dc.w    -6812,-7370,-7926,-8480,-9031,-9579,-10125,-10667
  3680.   dc.w    -11206,-11742,-12274,-12802,-13327,-13847,-14363,-14875
  3681.   dc.w    -15382,-15885,-16383,-16876,-17363,-17845,-18322,-18794
  3682.   dc.w    -19259,-19719,-20173,-20620,-21062,-21496,-21925,-22346
  3683.   dc.w    -22761,-23169,-23570,-23964,-24350,-24729,-25100,-25464
  3684.   dc.w    -25820,-26168,-26508,-26840,-27164,-27480,-27787,-28086
  3685.   dc.w    -28376,-28658,-28931,-29195,-29450,-29696,-29933,-30162
  3686.   dc.w    -30380,-30590,-30790,-30981,-31163,-31335,-31497,-31650
  3687.   dc.w    -31793,-31927,-32050,-32164,-32269,-32363,-32448,-32522
  3688.   dc.w    -32587,-32642,-32687,-32722,-32747,-32762,-32767,-32762
  3689.   dc.w    -32747,-32722,-32687,-32642,-32587,-32522,-32448,-32363
  3690.   dc.w    -32269,-32165,-32051,-31927,-31793,-31650,-31497,-31335
  3691.   dc.w    -31163,-30981,-30791,-30590,-30381,-30162,-29934,-29697
  3692.   dc.w    -29451,-29195,-28931,-28658,-28377,-28087,-27788,-27481
  3693.   dc.w    -27165,-26841,-26509,-26169,-25821,-25465,-25101,-24729
  3694.   dc.w    -24351,-23964,-23571,-23170,-22762,-22347,-21925,-21497
  3695.   dc.w    -21062,-20621,-20173,-19720,-19260,-18794,-18323,-17846
  3696.   dc.w    -17364,-16876,-16384,-15886,-15383,-14876,-14364,-13848
  3697.   dc.w    -13328,-12803,-12275,-11743,-11207,-10668,-10126,-9580
  3698.   dc.w    -9032,-8481,-7927,-7371,-6813,-6252,-5690,-5126
  3699.   dc.w    -4560,-3994,-3425,-2856,-2286,-1715,-1144,-572
  3700.   dc.w     0,571,1142,1714,2284,2855,3424,3992
  3701.   dc.w     4559,5125,5689,6251,6811,7370,7926,8479
  3702.   dc.w     9031,9579,10124,10667,11206,11741,12273,12802
  3703.   dc.w     13326,13847,14363,14875,15382,15885,16382,16875
  3704.   dc.w     17363,17845,18322,18793,19259,19718,20172,20620
  3705.   dc.w     21061,21496,21924,22346,22761,23169,23569,23963
  3706.   dc.w     24350,24728,25100,25464,25820,26168,26508,26840
  3707.   dc.w     27164,27480,27787,28086,28376,28658,28931,29195
  3708.   dc.w     29450,29696,29933,30161,30380,30590,30790,30981
  3709.   dc.w     31162,31334,31497,31650,31793,31926,32050,32164
  3710.   dc.w     32269,32363,32447,32522,32587,32642,32687,32722
  3711.   dc.w     32747,32761,32767
  3712.     endc
  3713.  
  3714. rotbaltab    ds.l    64
  3715.  
  3716. xy        ds.l    2*1024        ;x/y/z coordinaten
  3717. rotdontab    ds.l    2*1024        ;is getekend tabel
  3718. mt        ds.l    rot_hgt        ;mulutable (faster)
  3719.  
  3720. ;pic_wid    equ    4        ;wide in bytes
  3721. ;pic_hgt    equ    6        ;hoogte
  3722. ;pic_dpt    equ    8        ;number planes
  3723. ;pic_ani    equ    10        ;aantal effes (anim)
  3724. ;pic_vew    equ    12        ;viewmode
  3725. ;pic_cycstr    equ    14        ;cycle start (*4)
  3726. ;pic_cycend    equ    15        ;cycle end (*4)
  3727. ;pic_cycspd    equ    16        ;cycle speed (*4)
  3728. ;pic_cycadd    equ    17        ;cycle add (*4)
  3729. ;pic_palnum    equ    30        ;aantal kleuren
  3730. ;pic_pal    equ    32        ;palette start
  3731. ;pic_palsiz    equ    256*2        ;vaste palette size
  3732. ;pic_raw    equ    pic_pal+pic_palsiz    ;palette start
  3733.  
  3734. rotp.e
  3735.  
  3736.     SECTION    4,CODE_c
  3737.     cnop    0,8
  3738. rotc
  3739.     ifnd    ocs
  3740.     dc.l    'ROTA'            ;effect-longword-ID
  3741.     endc
  3742.     
  3743.     ifd    ocs
  3744.     dc.l    'ROTO'            ;effect-longword-ID
  3745.     endc
  3746.     rts
  3747.     cnop    0,8
  3748.  
  3749.  
  3750.  
  3751.     ;copperlijst in geval van vectorshade
  3752.  
  3753.     ifd    shade
  3754. rotcop
  3755.     dc.w    $0080,$0000,$0082,$0000    ;vt-copper terugspring-adres
  3756.  
  3757.     dc.w    $00e4,$0000,$00e6,$0000
  3758.     dc.w    $00e8,$0000,$00ea,$0000
  3759.     dc.w    $00ec,$0000,$00ee,$0000
  3760.     dc.w    $00f0,$0000,$00f2,$0000
  3761.  
  3762.     dc.w    $0100,$5000
  3763.     dc.w    $0108,rot_wid-vew_wid
  3764.     dc.w    $010a,rot_wid-vew_wid
  3765.  
  3766.     dc.w    $0088,$0000        ;terug naar vt-copper
  3767.     dc.w    $ffff,$fffe
  3768.     endc
  3769.         
  3770.     ;dit zijn de picture-tabellen, 2 voor double buffer
  3771.     ;of 6 voor vectorshade
  3772.  
  3773.     cnop    0,8
  3774. rotpic1
  3775.     dc.l    'PICT'
  3776.     dc.w    rot_wid,rot_hgt,rot_dpt,1,rot_vew
  3777.  
  3778.     ifd    ocs
  3779.     ds.b    4*4
  3780.     endc
  3781.     ifnd    ocs
  3782.     ds.b    8*4+16
  3783.     endc
  3784.  
  3785.     ifeq    1-rot_dpt
  3786.     ifnd    shade
  3787.     dc.w    2-1
  3788. rotpal1
  3789.     ifd    ocs
  3790.     dc.w    $000,$fff
  3791.     ds.w    256-2
  3792.     endc
  3793.     ifnd    ocs
  3794.     dc.w    $000,0,$fff,0
  3795.     ds.l    256-2
  3796.     endc
  3797.     endc
  3798.  
  3799.     ifd    shade
  3800.     dc.w    32-1
  3801. rotpal1
  3802.     ifd    ocs
  3803.     dc.w    $000,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3804.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3805.     dc.w    $333,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3806.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3807.     ds.w    256-32
  3808.     endc
  3809.     ifnd    ocs
  3810.     dc.w    $000,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
  3811.     dc.w    $666,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
  3812.     dc.w    $333,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
  3813.     dc.w    $666,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
  3814.     ds.l    256-32
  3815.     endc
  3816.     endc
  3817.     endc
  3818.     
  3819.     ifeq    2-rot_dpt
  3820.     dc.w    4-1
  3821. rotpal1
  3822.     ifd    ocs
  3823.     dc.w    $000,$f0f,$0ff,$fff
  3824.     ds.w    256-4
  3825.     endc
  3826.     ifnd    ocs
  3827.     dc.w    $000,0,$f0f,0,$0ff,0,$fff,0
  3828.     ds.l    256-4
  3829.     endc
  3830.     endc
  3831.     
  3832.     ifeq    3-rot_dpt
  3833.     dc.w    8-1
  3834. rotpal1
  3835.     ifd    ocs
  3836.     dc.w    $000,$f00,$0f0,$ff0,$00f,$f0f,$0ff,$fff
  3837.     ds.w    256-8
  3838.     endc
  3839.     ifnd    ocs
  3840.     dc.w    $000,0,$f00,0,$0f0,0,$ff0,0,$00f,0,$f0f,0,$0ff,0,$fff,0
  3841.     ds.l    256-8
  3842.     endc
  3843.     endc
  3844.     
  3845.     ifeq    4-rot_dpt
  3846.     dc.w    16-1
  3847. rotpal1
  3848.     ifd    ocs
  3849.     dc.w    $000,$f00,$0f0,$ff0,$00f,$f0f,$0ff,$fff
  3850.     dc.w    $555,$f55,$5f5,$ff5,$55f,$f5f,$5ff,$fff
  3851.     ds.w    256-16
  3852.     endc
  3853.     ifnd    ocs
  3854.     dc.w    $000,0,$f00,0,$0f0,0,$ff0,0,$00f,0,$f0f,0,$0ff,0,$fff,0
  3855.     dc.w    $555,0,$f55,0,$5f5,0,$ff5,0,$55f,0,$f5f,0,$5ff,0,$fff,0
  3856.     ds.l    256-16
  3857.     endc
  3858.     endc
  3859.     
  3860.     ifeq    5-rot_dpt
  3861.     dc.w    32-1
  3862. rotpal1
  3863.     ifd    ocs
  3864.     dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  3865.     dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  3866.     dc.w    $00,$11,$22,$33,$44,$55,$66,$77
  3867.     dc.w    $88,$99,$aa,$bb,$cc,$dd,$ee,$ff
  3868.     ds.w    256-32
  3869.     endc
  3870.     ifnd    ocs
  3871.     dc.w    $000,0,$111,0,$222,0,$333,0,$444,0,$555,0,$666,0,$777,0
  3872.     dc.w    $888,0,$999,0,$aaa,0,$bbb,0,$ccc,0,$ddd,0,$eee,0,$fff,0
  3873.     dc.w    $00,0,$11,0,$22,0,$33,0,$44,0,$55,0,$66,0,$77,0
  3874.     dc.w    $88,0,$99,0,$aa,0,$bb,0,$cc,0,$dd,0,$ee,0,$ff,0
  3875.     ds.l    256-32
  3876.     endc
  3877.     endc
  3878.     
  3879.     ifeq    6-rot_dpt
  3880.     dc.w    32-1
  3881. rotpal1
  3882.     ifd    ocs
  3883.     dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  3884.     dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  3885.     dc.w    $00,$11,$22,$33,$44,$55,$66,$77
  3886.     dc.w    $88,$99,$aa,$bb,$cc,$dd,$ee,$ff
  3887.     ds.w    256-32
  3888.     endc
  3889.     ifnd    ocs
  3890.     dc.w    $000,0,$111,0,$222,0,$333,0,$444,0,$555,0,$666,0,$777,0
  3891.     dc.w    $888,0,$999,0,$aaa,0,$bbb,0,$ccc,0,$ddd,0,$eee,0,$fff,0
  3892.     dc.w    $00,0,$11,0,$22,0,$33,0,$44,0,$55,0,$66,0,$77,0
  3893.     dc.w    $88,0,$99,0,$aa,0,$bb,0,$cc,0,$dd,0,$ee,0,$ff,0
  3894.     ds.l    256-32
  3895.     endc
  3896.     endc
  3897.     
  3898. rotpln1
  3899.     ds.b    rot_wid*rot_hgt*rot_dpt
  3900.  
  3901.     cnop    0,8
  3902. rotpic2
  3903.     dc.l    'PICT'
  3904.     dc.w    rot_wid,rot_hgt,rot_dpt,1,rot_vew
  3905.  
  3906.     ifd    ocs
  3907.     ds.b    4*4
  3908.     endc
  3909.     ifnd    ocs
  3910.     ds.b    8*4+16
  3911.     endc
  3912.  
  3913.     ifeq    1-rot_dpt
  3914.     ifnd    shade
  3915.     dc.w    2-1
  3916. rotpal2
  3917.     ifd    ocs
  3918.     dc.w    $000,$fff
  3919.     ds.w    256-2
  3920.     endc
  3921.     ifnd    ocs
  3922.     dc.w    $000,0,$fff,0
  3923.     ds.l    256-2
  3924.     endc
  3925.     endc
  3926.  
  3927.     ifd    shade
  3928.     dc.w    32-1
  3929. rotpal2
  3930.     ifd    ocs
  3931.     dc.w    $000,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3932.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3933.     dc.w    $333,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3934.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  3935.     ds.w    256-32
  3936.     endc
  3937.     ifnd    ocs
  3938.     dc.w    $000,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
  3939.     dc.w    $666,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
  3940.     dc.w    $333,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
  3941.     dc.w    $666,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
  3942.     ds.l    256-32
  3943.     endc
  3944.     endc
  3945.     endc
  3946.     
  3947.     ifeq    2-rot_dpt
  3948.     dc.w    4-1
  3949. rotpal2
  3950.     ifd    ocs
  3951.     dc.w    $000,$f0f,$0ff,$fff
  3952.     ds.w    256-4
  3953.     endc
  3954.     ifnd    ocs
  3955.     dc.w    $000,0,$f0f,0,$0ff,0,$fff,0
  3956.     ds.l    256-4
  3957.     endc
  3958.     endc
  3959.     
  3960.     ifeq    3-rot_dpt
  3961.     dc.w    8-1
  3962. rotpal2
  3963.     ifd    ocs
  3964.     dc.w    $000,$f00,$0f0,$ff0,$00f,$f0f,$0ff,$fff
  3965.     ds.w    256-8
  3966.     endc
  3967.     ifnd    ocs
  3968.     dc.w    $000,0,$f00,0,$0f0,0,$ff0,0,$00f,0,$f0f,0,$0ff,0,$fff,0
  3969.     ds.l    256-8
  3970.     endc
  3971.     endc
  3972.     
  3973.     ifeq    4-rot_dpt
  3974.     dc.w    16-1
  3975. rotpal2
  3976.     ifd    ocs
  3977.     dc.w    $000,$f00,$0f0,$ff0,$00f,$f0f,$0ff,$fff
  3978.     dc.w    $555,$f55,$5f5,$ff5,$55f,$f5f,$5ff,$fff
  3979.     ds.w    256-16
  3980.     endc
  3981.     ifnd    ocs
  3982.     dc.w    $000,0,$f00,0,$0f0,0,$ff0,0,$00f,0,$f0f,0,$0ff,0,$fff,0
  3983.     dc.w    $555,0,$f55,0,$5f5,0,$ff5,0,$55f,0,$f5f,0,$5ff,0,$fff,0
  3984.     ds.l    256-16
  3985.     endc
  3986.     endc
  3987.     
  3988.     ifeq    5-rot_dpt
  3989.     dc.w    32-1
  3990. rotpal2
  3991.     ifd    ocs
  3992.     dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  3993.     dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  3994.     dc.w    $00,$11,$22,$33,$44,$55,$66,$77
  3995.     dc.w    $88,$99,$aa,$bb,$cc,$dd,$ee,$ff
  3996.     ds.w    256-32
  3997.     endc
  3998.     ifnd    ocs
  3999.     dc.w    $000,0,$111,0,$222,0,$333,0,$444,0,$555,0,$666,0,$777,0
  4000.     dc.w    $888,0,$999,0,$aaa,0,$bbb,0,$ccc,0,$ddd,0,$eee,0,$fff,0
  4001.     dc.w    $00,0,$11,0,$22,0,$33,0,$44,0,$55,0,$66,0,$77,0
  4002.     dc.w    $88,0,$99,0,$aa,0,$bb,0,$cc,0,$dd,0,$ee,0,$ff,0
  4003.     ds.l    256-32
  4004.     endc
  4005.     endc
  4006.     
  4007.     ifeq    6-rot_dpt
  4008.     dc.w    32-1
  4009. rotpal2
  4010.     ifd    ocs
  4011.     dc.w    $000,$111,$222,$333,$444,$555,$666,$777
  4012.     dc.w    $888,$999,$aaa,$bbb,$ccc,$ddd,$eee,$fff
  4013.     dc.w    $00,$11,$22,$33,$44,$55,$66,$77
  4014.     dc.w    $88,$99,$aa,$bb,$cc,$dd,$ee,$ff
  4015.     ds.w    256-32
  4016.     endc
  4017.     ifnd    ocs
  4018.     dc.w    $000,0,$111,0,$222,0,$333,0,$444,0,$555,0,$666,0,$777,0
  4019.     dc.w    $888,0,$999,0,$aaa,0,$bbb,0,$ccc,0,$ddd,0,$eee,0,$fff,0
  4020.     dc.w    $00,0,$11,0,$22,0,$33,0,$44,0,$55,0,$66,0,$77,0
  4021.     dc.w    $88,0,$99,0,$aa,0,$bb,0,$cc,0,$dd,0,$ee,0,$ff,0
  4022.     ds.l    256-32
  4023.     endc
  4024.     endc
  4025.     
  4026. rotpln2
  4027.     ds.b    rot_wid*rot_hgt*rot_dpt
  4028.  
  4029.  
  4030.     ifd    shade
  4031.     rept    4
  4032.     ifd    ocs
  4033.     dc.l    'PICT'
  4034.     dc.w    rot_wid,rot_hgt,rot_dpt,1,rot_vew
  4035.     ds.b    4*4
  4036.     dc.w    32-1
  4037.     dc.w    $000,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  4038.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  4039.     dc.w    $333,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  4040.     dc.w    $666,$fff,$ccc,$fff,$999,$fff,$ccc,$fff
  4041.     ds.w    256-32
  4042.     ds.b    rot_wid*rot_hgt*rot_dpt
  4043.     endc
  4044.     ifnd    ocs
  4045.     dc.l    'PICT'
  4046.     dc.w    rot_wid,rot_hgt,rot_dpt,1,rot_vew
  4047.     ds.b    8*4+16
  4048.     dc.w    32-1
  4049.     dc.w    $000,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
  4050.     dc.w    $666,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
  4051.     dc.w    $333,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
  4052.     dc.w    $666,0,$fff,0,$ccc,0,$fff,0,$999,0,$fff,0,$ccc,0,$fff,0
  4053.     ds.l    256-32
  4054.     ds.b    rot_wid*rot_hgt*rot_dpt
  4055.     endc
  4056.     endr
  4057.     endc
  4058.  
  4059. rotpic_l    equ    rotpic2-rotpic1
  4060. rotinf_l    equ    rotpln1-rotpic1
  4061.  
  4062. ;    Section    plane,data_c    
  4063.     cnop    0,8
  4064. rotplnw
  4065.     ds.b    rot_wid*rot_hgt    ;work bitplane (filled vectors)
  4066.     cnop    0,8
  4067. rotplne
  4068.     ds.b    rot_wid*rot_hgt    ;empty bitplane (filled vectors)
  4069.  
  4070. rotc.e
  4071. rot.e
  4072.  
  4073. ;**********************************************************************
  4074.  
  4075. ;and here are the incbin-files....
  4076.  
  4077.         ifd    rout
  4078.         cnop    0,2
  4079.         Section    Data,Data        ;32-bits fast-mem !
  4080. rottube
  4081.         ifd    ocs
  4082.         incbin    'w:Effect/Tube.vec'
  4083.         endc
  4084.         ifnd    ocs
  4085.         incbin    'w:EffectAGA/Tube.rotobj'
  4086.         endc
  4087.         endc
  4088.         
  4089.  
  4090.